筛选法求素数的原理:
把1到n的所有数赋值给一个数组,就是让这些数与数组下标对应,即a[1]中的下标1就是1到n中的1.
定义一个数组a,把数组中的所有值都让它等于0。然后开始找素数和它的倍数,找2的倍数4,6,,,
3的倍数 9,15,,, 5的倍数,,,把这些下标为素数的就让它的值为0,
下标为偶数的就让它的值为1.比如 a[2]=0;a[3]=0;a[4]=1;a[6]=1;经过这样筛选后,输出数组中值为0的下标值即可,
这就是筛选后的素数
#include<stdio.h>
int main()
{
int a[2000]={0},i,j; /*定义一个比n大的数组,并把数组中所有值都弄成0*/
a[0]=a[1]=1; /*0和1不是素数,把它们的值弄成1*/
for(i=2;i<=1000;i++) /*从下标2开始找素数*/
{
if(a[i]==0) /*如果a[i]==0,说明这个数是素数*/
for(j=2*i;j<=1000;j+=i) /*从一个素数的2倍开始找,把数组下标值为素数倍数的所有数都筛选出来*/
a[j]=1; /*把下标值为素数倍数的所有数的数组的值都赋值为1*/
}
for(i=0;i<=1000;i++)
{
if(a[i]==0) /*输出数组值为0的下标值*/
printf("%d\n ",i);
}
{
int a[2000]={0},i,j; /*定义一个比n大的数组,并把数组中所有值都弄成0*/
a[0]=a[1]=1; /*0和1不是素数,把它们的值弄成1*/
for(i=2;i<=1000;i++) /*从下标2开始找素数*/
{
if(a[i]==0) /*如果a[i]==0,说明这个数是素数*/
for(j=2*i;j<=1000;j+=i) /*从一个素数的2倍开始找,把数组下标值为素数倍数的所有数都筛选出来*/
a[j]=1; /*把下标值为素数倍数的所有数的数组的值都赋值为1*/
}
for(i=0;i<=1000;i++)
{
if(a[i]==0) /*输出数组值为0的下标值*/
printf("%d\n ",i);
}
return 0;
}