|
20鱼币
求 10000 以内的素数个数。
哪儿错了
#include <stdio.h>
#include <math.h>
int main()
{
int count = 2;
int i, j,k;
for (i = 5; i < 10000; i++)
{
k=(int)sqrt((double)i);
for(j=2;j<=k;j++)
{
if (i % j != 0)
{
count++;
}
}
}
printf("10000以内共有%d个素数!\n", count);
return 0;
}
第二层for语句中if语句有问题,例如数字7是素数,当j=2时,if条件成立,素数加1;当j=3时,if条件依然成立,素数会再次加1,导致一个素数加的次数可能不止一次,最后结果出错。
我们可以换个想法,在2~那个之间,如果有能被莫一整数整除,那它一定不是素数,是合数,求出合数个数后,其余的就是素数的个数啦!程序如下:
#include <stdio.h>
#include <math.h>
int main()
{
int count = 2;
int i, j,k;
for (i = 5; i < 10000; i++)
{
k=(int)sqrt((double)i);
for(j=2;j<=k;j++)
{
if (i % j == 0)
{
count++;break;
}
}
}
count=9999-count;
printf("10000以内共有%d个素数!\n", count);
return 0;
}
这个程序是经过楼主的修改的,可以看到:如果i一旦能被j整除,合数加1,然后退出内层for循环,进行下一个数字的判断。(if语句中有break,一旦执行将退出内层循环)
|
-
最佳答案
查看完整内容
第二层for语句中if语句有问题,例如数字7是素数,当j=2时,if条件成立,素数加1;当j=3时,if条件依然成立,素数会再次加1,导致一个素数加的次数可能不止一次,最后结果出错。
我们可以换个想法,在2~那个之间,如果有能被莫一整数整除,那它一定不是素数,是合数,求出合数个数后,其余的就是素数的个数啦!程序如下:
#include
#include
int main()
{
int count = 2;
int i, j,k;
...
|