| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2700 人关注过本帖
标题:求素数的个数,出现未输入就退出程序的问题,求指点。谢谢~
只看楼主 加入收藏
Orcaina
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-10-18
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:12 
求素数的个数,出现未输入就退出程序的问题,求指点。谢谢~
我猜想是由于数组初始化时,a的值也是未知的才导致了这样的情况,但我的思路就是把输入的a作为第一个判断的数,不知道该怎么解决,请各位指点~不盛感激

给定两个非负整数a,b,其中0<= a,b<=1,000,000,请计算这两个数之间有多少个素数。
输入
第一行是一个整数K(1<=K<=1000),表示有多少个样例,每个样例占一行,是两个整数a和b,每个整数之间用一个空格隔开。
输出
每行输出一个样例的结果。
Sample Input  
2
2 3
17 19
  
Sample Output  
2
2

我想用筛法做:
#include <stdio.h>
#include <math.h>

int main()
{
    int K,a,b,i,j;//k是案例个数,a 和 b为区间的端点值(a,b)
    int num = 0;
    scanf("%d",&K);
    while(K--)
    {
        scanf("%d %d",&a,&b);//输入a和b的值
        int c[1000001];
   
         //用筛法把非素数都赋值成0.
         scanf("%d %d",&a,&b);
         for(i=a; i<=b; i++)//对数组进行初始化
        {
            c[i] = i;
        }        
        for(i=a; i<=((int)sqrt(b)); i++)//进行筛选
        {
            
            for(j=i+1; j<=b; j++)
            {
                if(c[i]!=0 && c[j]!=0 && c[j]%c[i]==0)
                {
                    c[j]=0;
                }
            }
        }

        for(i=a; i<=b; i++)
        {
            if(c[i]!=0)
            {
                num++;
            }
        }
        printf("%d\n",num);
    }
    return 0;
}


编译可以,但是一运行windows就显示出现了一个问题,导致程序停止正常工作。
关闭windows窗口后
小黑框显示Process exited with return value 3221225725
Press any key to continue...
 
搜索更多相关主题的帖子: include 
2016-10-25 17:08
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:20 
int c[1000001];在主函数申请内存空间过大……如果申请如此大容量的数组,建议在主函数开始前定义(而且申请位置也不规范,这会导致某些编译器测试过不了)
#include <stdio.h>
#include <math.h>
int c[1000001];
int main()
{……}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-10-25 17:16
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
还有,修改后即使看了题主的注释用起上来还是很不方便,而且还有多少的运行问题我就不多说了,建议题主能自己动手修改(或许叫优化),不然即使题主自己会用,但别人不会用就尴尬了——因为在执行运算时我还是搞不懂到底是程序本来问题还是我输入方式问题。

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-10-25 17:24
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 3楼 九转星河
弄懂了!原来题主多了一行输入,难怪……
 while(K--)
    {
        scanf("%d %d",&a,&b);//输入a和b的值
        int c[1000001];//------------------------把这个改掉后还多了个scnaf(),难怪——————
   
         //用筛法把非素数都赋值成0.
         scanf("%d %d",&a,&b);//---------这个多出来的scanf()就是我感觉坑爹的源头------------
还有这个程序运算结果也让我感到坑爹……如果可以的话,就自己测试并自己优化,然后把修改后的程序代码发过来

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-10-25 17:45
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
弄懂了,让我坑爹的源头是重复了个scanf,但改正后运算结果不知所云,建议题主自己测试自己改正并把优化后的代码发过来,这样我才能看出题主的程序到底要干什么……

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-10-25 17:49
Orcaina
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-10-18
收藏
得分:0 
回复 3楼 九转星河
谢谢指点,我问的那个问题已经解决了,刚发现还少考虑了一点,就是a b的大小.
写代码太少,看过的人都说乱,我自己感觉不到啊啊啊啊啊啊啊啊啊!!!!!!!!!!
2016-10-25 17:55
Orcaina
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-10-18
收藏
得分:0 
回复 5楼 九转星河
我的程序就是想计算任意两个数之间素数的个数.
可能我改的时候copy了忘记删了才多了个scanf()
2016-10-25 18:00
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 7楼 Orcaina
能自己解决,很好!但你说没问题不代表它真的没问题啊,我建议你还是把修改后的代码重发一遍,因为这样我才能测试你的程序还有没有问题(因为我测试时输出结果是有问题的,例如k>1时num没有重置,导致输出结果累加)

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-10-25 18:09
Orcaina
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-10-18
收藏
得分:0 
回复 8楼 九转星河
我还没有把这个题解出来,晚上上课,等我解出来了就发上来。
2016-10-25 18:21
Orcaina
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-10-18
收藏
得分:0 
回复 8楼 九转星河
我说的解决了是关于数组过大导致程序未运行就退出的问题,不是这道题目解决啦
2016-10-25 18:24
快速回复:求素数的个数,出现未输入就退出程序的问题,求指点。谢谢~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038224 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved