新手求教!为什么输出的数据很乱?
100以内的质数:
#include "stdio.h"
void main()
{
int a,b;
for(a=2;a<=100;a++)
{for(b=2;b<=a;b++)
if(a%b==0) break;
printf("%d ",b);
}
printf("\n");
}
为什么我运行出来有N多个数,而且很多都不符合要求
[解决办法]
上网搜索:质数算法
[解决办法]
- C/C++ code
int a,b; for(a=2;a<=100;a++) { for(b=2;b<=a;b++) { if(a%b == 0) break; } if(b>=a) //表示b是走完上面的循环 而不是break出来 才是质数 printf("%d ",b); } printf("\n");
[解决办法]
//你的逻辑是错误的,2楼已帮你修改好
for(a=2;a<=100;a++) //遍历2-100
{
for(b=2;b<=a;b++) //这个循环是除所有小于当前值的数
if(a%b==0) break; //如果能被整除则停止循环
printf("%d ",b); //打印b,这里就是不管上循环执行到哪一步都打印了b,即使a不是素数。这个打印的b就是错误的数据。当当前值是素数时,上循环一定是执行到b=a的,否则执行不到即b<a。接下来通过if(b>=a)来打印相应的素数。也就是if(b>=a)printf("%d\n",a);
}
[解决办法]
break是跳出循环,不执行其一下的语句。所以说如果一旦a%b==0就表明a不可能是质数。
所以写到这里,你的思路是正确的。
下面你开始思考如何把质数打印出来,于是你出现了混乱,你的想法是如果a是质数,就打印出来,那么如何表明a是质数了,很简单,就是a%b==0这个条件一直没满足,于是:
- C/C++ code
for(b=2;b<=a;b++) { if(a%b == 0) break; }