int main()
{
int i,j,n,a[101];//为了使数和下标一一对应
for(i=1;i<=100;i++)
{
a[i]=i;
a[1]=0;
}
for(i=2;i<sqrt(1.0*100);i++)
{
for(j=i+1;j<=100;j++)
{
if(a[i]!=0 && a[j]!=0)//排除标记的数
{
if(a[j]%a[i]==0)//用2除它后面的各个数,再用3除
{
a[j]=0;//把整除的数挖掉,标记为0
}
}
}
}
printf("\n");
for(i=2;i<=100;i++)
{
if(a[i]!=0)
{
printf("%d ",a[i]);//输出剩下的素数
}
}
printf("\n");
return 0;
}
主要分俩个部分:一是把非素数找出来并且标记,二是将剩下的素数排列输出。
其中需注意:100以内的数,只需将除数算到 = sqrt(1.0*100)即可。
举个栗子:
- 4的因数 1 2 4
- 16的因数 1 2 4 8 16
- 36的因数 1 2 3 4 6 9 12 36
结论:一个合数必有一个不大于sqrt(x)的因子 ,所以只需将除数算到 10 = sqrt(1.0*100)
本文介绍如何运用筛选法找出100以内的素数,关键在于只需求到sqrt(100)即10作为除数,避免了不必要的计算。通过排除合数,最终列出所有素数。
1203

被折叠的 条评论
为什么被折叠?



