求小于N的所有素数

本文介绍了一种通过筛法高效筛选区间[2,N]内的所有质数的方法,并提供了详细的算法步骤及实例演示,同时附带了C++实现代码。

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

筛法计算质数表
特点:能够快速筛选出区间 [2,N] 中的所有质数
算法:
在整数区间[2,N]内,
① 保留 2 同时去掉其他 2 的倍数,
② 保留 3 同时去掉其他 3 的倍数,
③ 保留 5 同时去掉其他 5 的倍数,
④ 保留 7 同时去掉其他的倍数,……,以此类推,一直到所有小于
N 的质数的倍数都被去掉,剩余的数字就是质数表
 筛法计算质数表实例
求出2到20之间的质数
第一步,取第一个非零数2(是质数),将其后面2的倍数全部置零(删掉)。得到
[ 2 3 0 5 0 7 0 9 0 11 0 13 0 15 0 17 0 19 0 ]
第二步,取下一个非零数3(是质数),将其后面3的倍数全部置零(删掉) 。得到
[ 2 3 0 5 0 7 0 0 0 11 0 13 0 0 0 17 0 19 0 ]
第三步,取下一个非零数5(是质数),将其后面5的倍数全部置零(删掉) 。得到
[ 2 3 0 5 0 7 0 0 0 11 0 13 0 0 0 17 0 19 0 ]
第四步,取下一个非零数7 (是质数),将其后面7的倍数全部置零(删掉) 。得到
[ 2 3 0 5 0 7 0 0 0 11 0 13 0 0 0 17 0 19 0 ]
……
代码实现:`

#include<iostream>
#define N 20
using namespace std;

int prime[N];//定义一个长度为N的数组,N为前面定义的常数 

int main(){
    int i, j;
    for(i=2; i<=N; i++)//建立表[2 3 4 5 6 7 8 9 10...]
       prime[i] = i;
    for(i=2; i<N; i++){
        if(prime[i]!=0)
           for(j=i+i; j<=N; j+=i)//将2*i,3*i,4*i...置零 
               prime[j] = 0;
    } 
    for(int i=0;i<=N;i++){
        if(prime[i])
           cout<<prime[i]<<" ";
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值