算法介绍:欧拉筛法是在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操作可保证满足线性条件,实现线性筛。

【学习笔记】欧拉筛法(线性筛素数)相关推荐

  1. 中高级数论 [欧拉函数线性筛,二次剩余]

    欧拉函数线性筛 对于素数ppp, φ(p∗i)={p−1i=1p∗φ(i)p∣i(p−1)∗φ(i)p∤i\varphi (p*i)= \begin{cases} p-1& i=1\\ p*\ ...

  2. 筛质数—(朴素筛法、埃氏筛法、欧拉筛法(线性筛法))

    筛质数时首先要了解质数的定理:1~n中有  个质数 下面再来看具体算法: 1.朴素筛法: 直接把2~n-1中质数和合数的倍数都筛一遍,其代码如下所示: int primes[N],cnt=0; boo ...

  3. 素数筛法(传统普通、朴素筛法、埃式筛法、欧拉筛法(线性筛))

    素数筛法(普通.朴素筛法.埃式筛法.欧拉筛法) 1.题目 2.分析 3.代码 传统普通 朴素筛法 朴素筛法(6.14) 埃式筛法 埃式筛法(6.14) 欧拉筛法(线性筛) 欧拉筛法(线性筛 6.14) ...

  4. 欧拉筛法(线性筛)的学习理解

    前言 在刚接触编程语言时,对于寻找素数,第一时间想到的便是二重循环暴力查找,其复杂度O(n^2),通过循环中只判断到根号n可以优化一些,不过复杂度也达不到预期.在数论的学习中,我学到了埃氏筛法,O(n ...

  5. 快速求素数表——埃氏筛法与欧拉筛法

    快速求素数表--埃氏筛法与欧拉筛法 快速求素数表埃氏筛法与欧拉筛法 埃氏筛法 埃氏筛法原理 埃氏筛法时间复杂度 埃氏筛法代码求出1000000以内的素数并且输出n个素数 欧拉筛法 欧拉筛法原理 欧拉筛 ...

  6. [SDOI2008]沙拉公主的困惑 线性筛 素数+欧拉

    本文为博主原创文章,欢迎转载,请注明出处 www.cnblogs.com/yangyaojia [SDOI2008]沙拉公主的困惑 线性筛 素数+欧拉 题目大意 给定n,m,求在1到n!内与m!互质的 ...

  7. 素数计算之埃氏筛法、欧拉筛法

    埃氏筛法 int main() {const int maxNumber=200;int isPrime[maxNumber];int i;int x;for (i=0;i<maxNumber; ...

  8. P3383 【模板】线性筛素数

    https://www.luogu.com.cn/problem/P3383 //线性筛法 /* P3383 [模板]线性筛素数 https://www.luogu.com.cn/problem/P3 ...

  9. 埃拉托色尼筛法和欧拉筛法

    筛法 筛法的基本思想是:把从1开始的.某一范围内的正整数从小到大顺序排列, 1不是素数,首先把它筛掉.剩下的数中最小的数是素数,然后去掉它的倍数.依次类推,直到筛子为空时结束. 比如,要产生[2,n] ...

  10. 质数c语言欧拉筛选,Python|欧拉筛法求质数

    欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章. 问题描述 我们知道第一个质数是 2.第二个质数是 3.第三个质 ...

最新文章

  1. java regexp_java中使用regexp
  2. FineReport实现java报表统计图表的效果图
  3. 人工智能的时代来了,新的商业机会在哪里?
  4. 【opencv】人脸检测(图片实时)
  5. 遗传算法中的转盘算法
  6. 95-190-642-源码-窗口操作符-EvictingWindowOperator
  7. 程序员在互联网公司和行业软件公司工作,有什么区别?
  8. python和java学哪个好-Python和Java学哪个好就业?
  9. 【廖雪峰官方网站/Java教程】反射
  10. 续订Exchange 2010 Edge SMTP证书
  11. 基于ssm汽车租赁管理系统的设计与实现
  12. 怎样自学python_怎样自学Python?
  13. Trend Micro 趋势科技
  14. 牛啊!微信支持发送彩色红包~~
  15. 记腾讯互娱网站布局(2)
  16. Python深度学习婴儿啼哭声分类识别,测试集准确率67.5%
  17. 爬虫篇——采集单机游戏(网页游戏),爬取小游戏
  18. 【QT+OpenCascade+RL】安川机器人仿真器源码学习
  19. 一些关于芯片烧录的心得
  20. 如何调整jupyter notebook行间显示图片的大小

热门文章

  1. 真·007!核酸采样机器人现身郑州;Python3面试准备与速查表;实时语音转文字工具库;AI绘画根据文本创建纹理;前沿论文 | ShowMeAI资讯日报
  2. 企业微信自建应用手动授权,获取用户详细信息
  3. 苹果又一次将国产手机遮羞布撕下了,证明了谁才是创新领导者
  4. linux改-文件夹名称,linux修改文件夹名字
  5. ubuntu更改文件夹权限
  6. 抗光幕布为什么深受家庭用户青睐?
  7. CTGU实验5_1-创建还书过程中的触发器
  8. Android FrameLayout的:layout_marginTop属性失效的问题
  9. FormulaR1C1是EXCEL中单元格公式输入方法
  10. 苹果手机换电池对手机有影响吗_手机电池多久需要换一次?