[笔记] 筛素数——朴素筛法及其优化:埃氏筛法 #质数(素数)

朴素筛法

从2~n枚举 i,再从小到大枚举所有已知的质数 primesj,筛掉合数 i*primesj,遇到新的质数就入队==

枚举所有小于n的数i,将i的所有倍数筛掉

筛完后剩下的数就是质数

cpp 复制代码
朴素做法
void get_primes(int n ){
    for(int i = 2; i <= n; i ++){
    	if(!st[i])
    		primes[cnt ++] = i;//如果是质数,入队
    	for(int j = i + i; j <= n; j +=i)
    		st[j] = 1;//删掉它的所有倍数
	}
}
时间分析:n/2 + n/3 +....+n/n = n log n(大概)

埃氏筛法

  1. 朴素做法的优化:埃氏筛法。(此算法由一个埃及人发明,所以叫 埃氏筛法)
    原理:当i不是质数时,没必要筛掉它的倍数,因为它的吧倍数将会是其它质数的倍数。
  2. 筛到N时,如果N没有被筛掉,就说在2~i-1中没有N的约数,所以N是质数。
    时间是O(n log n)约等于 O(n)(和O(n)一个级别)
    3.补充:质数定理:1~n当中有 n / logn 个质数
cpp 复制代码
埃氏筛法
void get_primes(int n ){
    for(int i = 2; i <= n; i ++){
        if(!st[i]) {
        	primes[cnt ++] = n;//没被筛掉,说明是质数
        	for(int j = i + i; j <= n; j += i)//干掉它的所有倍数
        		st[j] = 1;
        }	
    }
}
时间是O(n log log n)和O(n)一个级别
相关推荐
John_ToDebug11 小时前
判断力无法被 AI 替代,但它正在被你亲手扔掉
经验分享·笔记
2601_9622186111 小时前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
anew___11 小时前
蜂鸣器播放音乐——让 Arduino 唱出旋律
c++·stm32·单片机·嵌入式硬件·c
吞下星星的少年·-·11 小时前
The 2026 ICPC Asia East Continent Online Contest (II)(构造)
数据结构·算法
柳鲲鹏12 小时前
运气学概论:提纲草案
笔记
stolentime13 小时前
洛谷P10515 转圈题解
c++·算法·数学建模·贪心算法
tdtsmt14 小时前
穿戴硬件量产工艺实录:天地通电子智能手表主板 SMT 贴片案
c++
和裕14 小时前
蜂窝板 vs 七层瓦楞重型纸箱:大件工业设备运输性能与成本全对比
大数据·运维·网络·人工智能·算法
衡石科技14 小时前
Data_Agent记忆机制与经验复用衡石分析智能体会话记忆与长期学习技术解析
人工智能·科技·学习·算法·企业级bi