新手:关于C语言“筛选法求素数”的一点疑问
一.问题:用筛选法求100以内的素数
二.程序如下:
#include<stdio.h>
int main(void)
{
int a[101],i,j,n; //定义数组a:包含101个元素
for(i=1;i<101;i++) //a[0]不用,只用a[1]-a[100];
a[i]=i; //让a[1]-a[100]为1-100;
a[1]=0; //1为非素数,挖掉
for(i=2;i<100;i++)
for(j=i+1;j<101;j++) //用i依次除它后面的数
{
if(a[i]!=0&&a[j]!=0)//-------->为什么一定要把这句加上输出才正确?
if(a[j]%a[i]==0)
a[j]=0; //让非素数的值为0
} //以上过程是把非素数挖掉
n=0; //换行用
for(i=2;i<101;i++)
{
if(a[i]!=0)
{
printf("%5d",a[i]);
n++;
}
if(n%10==0)
printf("\n");
} //输出素数
printf("\n");
return 0;
}
三.疑问
为什么必须要加上这句“if(a[i]!=0&&a[j]!=0)”,程序才能执行?
前面的代码明显可以推出a[i]!=0,a[j]!=0,是计算机推不出,还是其它什么原因。
希望各位解答下我的疑惑,谢谢。
[解决办法]
前面的代码不能推出不等于零,除非你把限制条件写到循环条件中去。
for(i=2;i<100;i++) {
if (a[i] == 0) continue;
for(j=i+1;j<101;j++) { //用i依次除它后面的数
if (a[j] == 0) continue;
...
}
}