首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

生手:关于C语言“筛选法求素数”的一点疑问

2012-12-29 
新手:关于C语言“筛选法求素数”的一点疑问一.问题:用筛选法求100以内的素数二.程序如下:#includestdio.hi

新手:关于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;
  
        ...
    }
}

热点排行