C-下面求1到100素数代码有错吗?为什么运行只出来两个数?

发布于 2016-10-15 21:47:49 字数 444 浏览 1500 评论 3

#include <stdio.h>
main()
{
int i=2;
int j=2;
int m=0;
int line=0;
for(i=2;i<=100;i++)
{
for(j=2;j<i;j++)
{
if (0==i%j)
{
m=1;
}
}
if(m==0)
{
line++;
printf("M",i);

if(0==line%5)
{
printf("n");
}
}
}
printf("n");
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

虐人心 2017-09-23 18:14:37

你的代码有很多需要改进的地方,给你推荐一篇博客:
浅析求素数算法

想挽留 2017-08-03 23:07:46

在for(int j...)循环的外面,在if(0 == line%5)的上一行。把m的值重置成0。你这个设置一次就没重置了。或者把int m=0;移动到两个for中间 都可以,重置一下这个控制变量吧

晚风撩人 2017-05-16 02:01:46

你程序中有一个问题:当第一个非素数出现的时候,会把m置为1,又由于后面没有把m恢复为0的操作,导致对之后的每一个数,m的值都是1,所以之后所有的数都不可能显示出来了。

另外,你的程序里还有一个效率问题:当一个非素数遇到第一个约数的时候,m就置为1了,但是这个时候你还是会一直遍历下去,但是这种遍历是没有意义的,所以在遇到第一个约数的时候,把m置为1之后,就退出循环,执行下面的操作。

总的修改共这两处:
第一处是每操作完一个数,就把m重置为0。
第二处是增加找到约数时就退出内循环操作。

修改后的代码如下所示:

#include <stdio.h>
int main()
{
int i=2;
int j=2;
int m=0;
int line=0;

for(i=2;i<=100;i++)
{
for(j=2;j<i;j++)
{
if (0==i%j)
{
m=1;
break; //非素数,直接退出内循环
}
}

if(m==0)
{
line++;
printf("%4d",i);
if(0==line%5)
{
printf("n");
}
}

m=0; //重置m=0,进行下一个数字的判断
}

printf("n");
getchar();
return 0;
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文