【学习笔记】欧拉筛法(线性筛素数)
算法介绍:欧拉筛法是在O(N)线性时间内实现素数筛选的优秀算法。
算法思路:总体上与Eratosthenes筛法类似,也是用较小的数筛去较大的合数。
关键思路在于:每一个合数都保证是被其最小的质因子筛去的,下简称称该条件为线性条件。
结合代码分析:
inline void Euler_Sieve(){for(register int i=2;i<=n;i++){if(isPrime[i]) pri[++cnt]=i;for(register int j=1;j<=cnt&&i*pri[j]<=n;j++){isPrime[i*pri[j]]=false;if(i%pri[j]==0) break;}}
}
对每一个数i,无论其是否为质数,都可以用其筛去其他数。
j 循环到 i % Prime[j] = 0就恰好需要break的理由是:
设1<=s<j<t
证明:若最小质因子比pri[j]小,则在循环到j之前就已break,不可能循环至pri[j]。
证明:引理1已证i的最小质因子为pri[j],故i*pri[j]最小质因子也应为pri[j]。引理2保证了被pri[j]筛掉的所有合数都满足线性条件。
证明方法如引理1。引理3保证了j之前所有被筛掉的合数都满足线性条件。
证明方法:由引理1可易证。故若j继续循环增大,则i*pri[t]将被pri[t]筛掉,但pri[t]并非其最小质因子,故不满足线性条件,故需break。
综上,当i%pri[j]==0的时候实行break操作可保证满足线性条件,实现线性筛。
【学习笔记】欧拉筛法(线性筛素数)相关推荐
- 中高级数论 [欧拉函数线性筛,二次剩余]
欧拉函数线性筛 对于素数ppp, φ(p∗i)={p−1i=1p∗φ(i)p∣i(p−1)∗φ(i)p∤i\varphi (p*i)= \begin{cases} p-1& i=1\\ p*\ ...
- 筛质数—(朴素筛法、埃氏筛法、欧拉筛法(线性筛法))
筛质数时首先要了解质数的定理:1~n中有 个质数 下面再来看具体算法: 1.朴素筛法: 直接把2~n-1中质数和合数的倍数都筛一遍,其代码如下所示: int primes[N],cnt=0; boo ...
- 素数筛法(传统普通、朴素筛法、埃式筛法、欧拉筛法(线性筛))
素数筛法(普通.朴素筛法.埃式筛法.欧拉筛法) 1.题目 2.分析 3.代码 传统普通 朴素筛法 朴素筛法(6.14) 埃式筛法 埃式筛法(6.14) 欧拉筛法(线性筛) 欧拉筛法(线性筛 6.14) ...
- 欧拉筛法(线性筛)的学习理解
前言 在刚接触编程语言时,对于寻找素数,第一时间想到的便是二重循环暴力查找,其复杂度O(n^2),通过循环中只判断到根号n可以优化一些,不过复杂度也达不到预期.在数论的学习中,我学到了埃氏筛法,O(n ...
- 快速求素数表——埃氏筛法与欧拉筛法
快速求素数表--埃氏筛法与欧拉筛法 快速求素数表埃氏筛法与欧拉筛法 埃氏筛法 埃氏筛法原理 埃氏筛法时间复杂度 埃氏筛法代码求出1000000以内的素数并且输出n个素数 欧拉筛法 欧拉筛法原理 欧拉筛 ...
- [SDOI2008]沙拉公主的困惑 线性筛 素数+欧拉
本文为博主原创文章,欢迎转载,请注明出处 www.cnblogs.com/yangyaojia [SDOI2008]沙拉公主的困惑 线性筛 素数+欧拉 题目大意 给定n,m,求在1到n!内与m!互质的 ...
- 素数计算之埃氏筛法、欧拉筛法
埃氏筛法 int main() {const int maxNumber=200;int isPrime[maxNumber];int i;int x;for (i=0;i<maxNumber; ...
- P3383 【模板】线性筛素数
https://www.luogu.com.cn/problem/P3383 //线性筛法 /* P3383 [模板]线性筛素数 https://www.luogu.com.cn/problem/P3 ...
- 埃拉托色尼筛法和欧拉筛法
筛法 筛法的基本思想是:把从1开始的.某一范围内的正整数从小到大顺序排列, 1不是素数,首先把它筛掉.剩下的数中最小的数是素数,然后去掉它的倍数.依次类推,直到筛子为空时结束. 比如,要产生[2,n] ...
- 质数c语言欧拉筛选,Python|欧拉筛法求质数
欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章. 问题描述 我们知道第一个质数是 2.第二个质数是 3.第三个质 ...
最新文章
- java regexp_java中使用regexp
- FineReport实现java报表统计图表的效果图
- 人工智能的时代来了,新的商业机会在哪里?
- 【opencv】人脸检测(图片实时)
- 遗传算法中的转盘算法
- 95-190-642-源码-窗口操作符-EvictingWindowOperator
- 程序员在互联网公司和行业软件公司工作,有什么区别?
- python和java学哪个好-Python和Java学哪个好就业?
- 【廖雪峰官方网站/Java教程】反射
- 续订Exchange 2010 Edge SMTP证书
- 基于ssm汽车租赁管理系统的设计与实现
- 怎样自学python_怎样自学Python?
- Trend Micro 趋势科技
- 牛啊!微信支持发送彩色红包~~
- 记腾讯互娱网站布局(2)
- Python深度学习婴儿啼哭声分类识别,测试集准确率67.5%
- 爬虫篇——采集单机游戏(网页游戏),爬取小游戏
- 【QT+OpenCascade+RL】安川机器人仿真器源码学习
- 一些关于芯片烧录的心得
- 如何调整jupyter notebook行间显示图片的大小
热门文章
- 真·007!核酸采样机器人现身郑州;Python3面试准备与速查表;实时语音转文字工具库;AI绘画根据文本创建纹理;前沿论文 | ShowMeAI资讯日报
- 企业微信自建应用手动授权,获取用户详细信息
- 苹果又一次将国产手机遮羞布撕下了,证明了谁才是创新领导者
- linux改-文件夹名称,linux修改文件夹名字
- ubuntu更改文件夹权限
- 抗光幕布为什么深受家庭用户青睐?
- CTGU实验5_1-创建还书过程中的触发器
- Android FrameLayout的:layout_marginTop属性失效的问题
- FormulaR1C1是EXCEL中单元格公式输入方法
- 苹果手机换电池对手机有影响吗_手机电池多久需要换一次?