利用筛选法求100之内的素数,

#include<math.h>
#include<stdio.h>
int main()
{
    int a[101],i,j,n;
    for(i=1;i<=100;i++)
        a[i]=i;
        a[1]=0;
    for(i=2;i<sqrt(100);i++)
    for(j=i+1;j<=100;j++)
    {
        if(a[i]!=0&&a[j]!=0)
          if(a[j]%a[i]==0)
            a[j]=0;
    }    
    printf("\n");
    for(i=2,n=0;i<=100;i++)
    {
        if(a[i]!=0)
        {
            printf("%5d",a[i]);
            n++;
        }
        if(n==10)
        {
            printf("\n");
            n=0;
        }
    }
        printf("\n");
        return 0;
}

下面这段代码什么意思?看不太懂

for(i=2;i<sqrt(100);i++)
    for(j=i+1;j<=100;j++)
    {
        if(a[i]!=0&&a[j]!=0)
          if(a[j]%a[i]==0)
            a[j]=0;
    }    


一个合数a=b*c,对于所有的(b,c)整数对,不可能b和c同时大于a的平方根,于是只需要扫描a能否被小于a平方根的数整除即可
初始a数组保存了2-100的数字,对数组进行遍历,对于每个a[j]:遍历数组中索引小于j的所有值,如果整除,则说明a[j]是合数,将a[j]设为零
在内层遍历中,所有索引小于j的合数已经被替换为0,保留下的是所有素数,所以要判断a[i]是否为0
有帮助望采纳