C-下面求1到100素数代码有错吗?为什么运行只出来两个数?
#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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你的代码有很多需要改进的地方,给你推荐一篇博客:
浅析求素数算法
在for(int j...)循环的外面,在if(0 == line%5)的上一行。把m的值重置成0。你这个设置一次就没重置了。或者把int m=0;移动到两个for中间 都可以,重置一下这个控制变量吧
你程序中有一个问题:当第一个非素数出现的时候,会把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;
}