筛选法求素数

筛选法求素数的原理:
把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);
    }

    return 0;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值