埃氏筛法原理

素数的定义:素数就是除了1和本身之外没有其他的约数,所以有约数的都不是素数。

埃氏筛法的思想就是:先去掉2的倍数,再去掉3的倍数,再去掉4的倍数,……依此类推,直到最大数小于最后一个标出的素数的平方,那么剩下的序列中所有的数都是素数。 时间复杂度:O(nloglogn)
代码如下:

#include<bits/stdc++.h>
#define maxn 10000000
#define INF 0x3f3f3f3f
using namespace std;
bool a[maxn+5];
int main()
{int n,m;scanf("%d%d",&n,&m);memset(a,true,sizeof(a));for(int i=2;i<=n;i++){if(a[i]){for(int j=2;i*j<=n;j++)a[i*j]=false;}}a[1]=false;int t;while(m--){scanf("%d",&t);if(a[t])printf("Yes\n");else printf("No\n");}return 0;
}

欧拉筛法

在埃式筛法中,存在有些数存在重复筛的情况,如:385这个数,385= 5 * 7* 11,会被5的倍数时标记一次,7的倍数时标记一次,11的倍数时标记一次,造成效率达不到最优。而线性筛法基于改进这个不足的基础上,在线性时间内,也就是O(n),用筛选的方法把素数找出来。

 核心原理:对于每个合数,都只由它最小的质因子筛掉。 比如:(假定:ans[]数组中存放着已经确定的素数)合数 i = p(最小素因子)* a;  若 i%ans[j] ==0; 则 i * ans[j+1] =  p * a * ans[j+1] 可以被后面的 a * ans[j+1] 再乘以素数 p 筛选出来,(显而p<ans[j+1]) 所以i%ans[j] == 0 时要停止。


代码如下:

#include<bits/stdc++.h>
#define maxn 10000000
#define INF 0x3f3f3f3f
using namespace std;
bool a[maxn+5];
int b[maxn+5];//存储质数
int main()
{int n,m;scanf("%d%d",&n,&m);memset(a,true,sizeof(a));a[1]=false;int k=1;for(int i=2;i<=n;i++){if(a[i])   //如果i为质数b[k++]=i;//存上for(int j=1;j<=k&&i*b[j]<=n;j++){a[i*b[j]]=false;if(i%b[j]==0)break;}}int t;while(m--){scanf("%d",&t);if(a[t])printf("Yes\n");else printf("No\n");}return 0;
}

质数——埃式筛法和欧式筛法相关推荐

  1. c语言列出1~100所有素数_一次找出范围内的所有素数,埃式筛法是什么神仙算法?...

    今天这篇是算法与数据结构专题的第23篇文章,我们继续数论相关的算法,来看看大名鼎鼎的埃式筛法. 我们都知道在数学领域,素数非常重要,有海量的公式和研究关于素数,比如那个非常著名至今没有人解出来的哥德巴 ...

  2. 一次找出范围内的所有素数,埃式筛法是什么神仙算法?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天这篇是算法与数据结构专题的第23篇文章,我们继续数论相关的算法,来看看大名鼎鼎的埃式筛法. 我们都知道在数学领域,素数非常重要,有海量的 ...

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

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

  4. c语言 快速筛质数,快速筛素数(埃式筛+线性筛+Miller_Rabin算法)

    在CF上做到一道核心是需要筛出1~n所有素数的题目,然后刚好又没学过,就学习了快速筛素数的办法,基础的n根号n的算法这里大家每个人都知道吧QAQ,就不讲了,好像还是C语言上机说过的题目. 首先给大家介 ...

  5. 【算法学习】找素数的几种算法: 简单穷举, 埃氏筛法, 欧氏筛法, 从O(n2)到O(n)

    文章简介 本文记录寻找素数的几种算法, 本文中的O()没有指明默认表示时间复杂度 代码使用Java 目录 文章简介 正文 穷举计数法(判断O(n)) 优化: 布尔+break(判断 小于O(n)) 优 ...

  6. 模板 - 质数筛法(线性筛法、二次筛法)

    整理的算法模板合集: ACM模板 目录 无平方因子的数 试除法判定质数 Miller−RobbinMiller-RobbinMiller−Robbin算法 线性筛法 二次筛法 Pollard-Rho算 ...

  7. 【数论】质数筛选法(埃拉托色尼筛法及线性筛法)

    质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数. 在编程中,有时我们会遇到要找出一个整数范围内所有质数的情况,如果该范围很大,逐个判定该范围内所有数是否为质数(找出它是否能被大于 ...

  8. 素数-试除法和埃式筛选法模板

    试除法: bool is_prime(int n) {if (n <= 1) return false;for (int i = 2;i<=sqrt(n);i++)//这样写更好!if ( ...

  9. 欧拉筛+埃式筛求素数

    参考:https://blog.csdn.net/nk_test/article/details/46242401 先看一下经典的埃拉特斯特尼筛法: 1 int prime[MAXN],vis[MAX ...

最新文章

  1. 22.6. Query 查询
  2. 图.exe 已触发了一个断点。 出现了_学术简报︱基于保护综合重要度的最小断点集优选方法...
  3. 创建应用服务器连接客户端
  4. react中form可以嵌套一个form吗_Ant-Design从v3升级到v4的Form适配
  5. cacheinterceptor第二次访问没被调用_双分派访问者模式的前世今生
  6. 洛谷 P2048 BZOJ 2006 [NOI2010]超级钢琴
  7. Java复制文件的4种方式
  8. 李珣动态爱心代码教程
  9. 软件测试--IEEE829标准
  10. OSChina 周四乱弹 —— 帅帅帅,飞一般的感觉~
  11. VMware vRealize Suite 8.8.0
  12. 破解飞速!《星际2》可与电脑进行AI对战
  13. n1装哪个版本的linux,斐讯t1/N1是装Ubuntu,还是LinuxDeploy,哪个更好?
  14. Oracle 12C 新特性之 恢复表
  15. 第七届“华文奖”开展 特设主题向余光中致敬
  16. 车牌识别EasyPR--开发详解
  17. 基于御安全APK加固的游戏反外挂方案
  18. 机器视觉中坐标系转换
  19. Sql 修改表结构的操作
  20. ZZULIOJ 1800: 少水群多刷题

热门文章

  1. POPTEST老李谈Debug和Release的区别(c#) 1
  2. [JavaScript]JavaScript处理iframe的动作
  3. Visual Studio BI 中维度的KeyColumns属性
  4. jsp的九大内置对象和作用域
  5. 获得国内中国电信,网通,铁通的最新ip段的方法
  6. LOCK - 明确地锁定一个表
  7. Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.6 给自动检测组件命名...
  8. SharePoint PowerShell 批量删除遗弃视图
  9. 计蒜客 - 守望者的逃离
  10. Oracle创建一个用户并赋予其他用户表的访问权限