素数筛法

题目:

利用素数筛法求出2到10000内的所有素数。

素数筛法:找到一个素数,就将它的所有倍数均标记为非素数;当遍历到一个数时,若它未被任何小于它的素数标记为非素数,则确定其为素数。

步骤如下:从2开始遍历2到10000的所有整数,若当前整数没有因为它是某个小于其的素数的倍数而被标记为非素数,则判定其为素数,并标记它所有的倍数是非素数。然后继续遍历下一个数。遍历完后,所有未被标记成非素数的数是素数。

代码:

vector<int> prime;//保存质数
bool isPrime[10001];//标记数组
void Initial()
{
    for(int i=0;i<10001;i++)
    {
        isPrime[i]=true;
    }
    isPrime[0]=false;
    isPrime[1]=false;
    for(int i=2;i<10001;i++)
    {
        if(!isPrime[i])//非质数则跳过
            continue;
        prime.push_back(i);
        for(int j=i*i;j<10001;j+=i)
            isPrime[j]=false;//质数的倍数为非质数
    }
    return ;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值