题解 | #筛选法求素数#
筛选法求素数
https://www.nowcoder.com/practice/06c3dcc303654ef4926654023eca1e5a
#include<stdio.h>
int main()
{
int b,a[1000]={0},m,count=0; //定义一个全为0的数组,后面输出就不考虑数组的个数,因为只输出不为0的。
scanf("%d",&b);
for(int i=2;i<=b;i++)
{
for(int j=i-2;j<i-1;j++) //使2至n的数分别读入数组a的第0位,第1位,第二位.......
{
a[j]=i;
}
}
for(int i=0;i<b-1;i++)
{
if(a[i]) //因为a[j]可能为0,a[j]只是a[i]的后一位数,所以需要a[i]不为0。
{
for(int j=i+1;j<b-1;j++)
{
if(a[j]%a[i]==0)
{
a[j]=0;
}
}
}
}
for(int i=0;i<b-1;i++) //不考虑i最大取多少,但必须把所有的数全扫描一遍。因为初始定义的a全为0,但只输出不为0的数。
{
if(a[i])
{
printf("%d ",a[i]);
count++;
}
}
printf("\n%d",b-1-count);
return 0;
}
int main()
{
int b,a[1000]={0},m,count=0; //定义一个全为0的数组,后面输出就不考虑数组的个数,因为只输出不为0的。
scanf("%d",&b);
for(int i=2;i<=b;i++)
{
for(int j=i-2;j<i-1;j++) //使2至n的数分别读入数组a的第0位,第1位,第二位.......
{
a[j]=i;
}
}
for(int i=0;i<b-1;i++)
{
if(a[i]) //因为a[j]可能为0,a[j]只是a[i]的后一位数,所以需要a[i]不为0。
{
for(int j=i+1;j<b-1;j++)
{
if(a[j]%a[i]==0)
{
a[j]=0;
}
}
}
}
for(int i=0;i<b-1;i++) //不考虑i最大取多少,但必须把所有的数全扫描一遍。因为初始定义的a全为0,但只输出不为0的数。
{
if(a[i])
{
printf("%d ",a[i]);
count++;
}
}
printf("\n%d",b-1-count);
return 0;
}