#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
有帮助望采纳