埃拉托色尼筛选法计算素数个数

本文介绍了一种高效的计算素数数量的方法——埃拉托色尼筛选法。通过使用布尔数组标记合数,该算法可以快速找出指定范围内所有素数。以MAXNUM=20为例,展示了算法的具体步骤,并验证了20以内素数的确切数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

埃拉托色尼筛选法计算素数个数

素数:指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
int main()
{
    int MAXNUM = 1000;  // 在这里以1000为例
    int num = 0;   //num 为质数个数
    int i, j;
    int prime[MAXNUM + 1];

    for(i = 2; i <= MAXNUM; ++i)  //设立标记,初始值都设为1
        prime[i] = 1;

    for(i = 2; i*i <= MAXNUM; ++i) //从 2 ~ MAXNUM的算数平方根
    {
        if(prime[i] == 1)
        {
            for(j = 2*i; j <= MAXNUM; ++j)
            {
                if(!prime[j]) continue;
                if(j%i == 0) prime[j]=0;  //非素数,则标记为0,合数
            }
        }
    }

    for(i = 2; i <= MAXNUM; ++i)  //遍历统计MAXNUM以内(包括自身)的素数个数
        if(prime[i])
            num++; 
    cout<<"The number of prime is " << num <<endl;

    return 0;
}
以MAXNUM=20为例,由于1既不是质数也不是合数,从2开始判断。
  1. 先列出这些数,一开始它们的标记都是1:
    2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,19, 20
  2. 从2 ~ 4 逐一循环判断(5*5 > 20):
    (1)对于2,其标志为1,则从4 ~ 20逐一判断,能被2整除的数标记置0,剩下有:
    2, 3, 5, 7, 9, 11, 13, 15, 17, 19
    (2)对于3,其标志为1,则从3 ~ 20逐一判断,标记为0的跳过,否则能被3整除的标记置0,剩下有:
    2,3,5,7,11,13,17,19
    (3)对于4,由于其在(1)中标记已被置0,不再进行循环判断
  3. 以上结果显示,20以内的素数有8个。运行程序得到的结果也是8。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值