质数——埃式筛法和欧式筛法
埃氏筛法原理
素数的定义:素数就是除了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;
}
质数——埃式筛法和欧式筛法相关推荐
- c语言列出1~100所有素数_一次找出范围内的所有素数,埃式筛法是什么神仙算法?...
今天这篇是算法与数据结构专题的第23篇文章,我们继续数论相关的算法,来看看大名鼎鼎的埃式筛法. 我们都知道在数学领域,素数非常重要,有海量的公式和研究关于素数,比如那个非常著名至今没有人解出来的哥德巴 ...
- 一次找出范围内的所有素数,埃式筛法是什么神仙算法?
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天这篇是算法与数据结构专题的第23篇文章,我们继续数论相关的算法,来看看大名鼎鼎的埃式筛法. 我们都知道在数学领域,素数非常重要,有海量的 ...
- 素数筛法(传统普通、朴素筛法、埃式筛法、欧拉筛法(线性筛))
素数筛法(普通.朴素筛法.埃式筛法.欧拉筛法) 1.题目 2.分析 3.代码 传统普通 朴素筛法 朴素筛法(6.14) 埃式筛法 埃式筛法(6.14) 欧拉筛法(线性筛) 欧拉筛法(线性筛 6.14) ...
- c语言 快速筛质数,快速筛素数(埃式筛+线性筛+Miller_Rabin算法)
在CF上做到一道核心是需要筛出1~n所有素数的题目,然后刚好又没学过,就学习了快速筛素数的办法,基础的n根号n的算法这里大家每个人都知道吧QAQ,就不讲了,好像还是C语言上机说过的题目. 首先给大家介 ...
- 【算法学习】找素数的几种算法: 简单穷举, 埃氏筛法, 欧氏筛法, 从O(n2)到O(n)
文章简介 本文记录寻找素数的几种算法, 本文中的O()没有指明默认表示时间复杂度 代码使用Java 目录 文章简介 正文 穷举计数法(判断O(n)) 优化: 布尔+break(判断 小于O(n)) 优 ...
- 模板 - 质数筛法(线性筛法、二次筛法)
整理的算法模板合集: ACM模板 目录 无平方因子的数 试除法判定质数 Miller−RobbinMiller-RobbinMiller−Robbin算法 线性筛法 二次筛法 Pollard-Rho算 ...
- 【数论】质数筛选法(埃拉托色尼筛法及线性筛法)
质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数. 在编程中,有时我们会遇到要找出一个整数范围内所有质数的情况,如果该范围很大,逐个判定该范围内所有数是否为质数(找出它是否能被大于 ...
- 素数-试除法和埃式筛选法模板
试除法: bool is_prime(int n) {if (n <= 1) return false;for (int i = 2;i<=sqrt(n);i++)//这样写更好!if ( ...
- 欧拉筛+埃式筛求素数
参考:https://blog.csdn.net/nk_test/article/details/46242401 先看一下经典的埃拉特斯特尼筛法: 1 int prime[MAXN],vis[MAX ...
最新文章
- 22.6. Query 查询
- 图.exe 已触发了一个断点。 出现了_学术简报︱基于保护综合重要度的最小断点集优选方法...
- 创建应用服务器连接客户端
- react中form可以嵌套一个form吗_Ant-Design从v3升级到v4的Form适配
- cacheinterceptor第二次访问没被调用_双分派访问者模式的前世今生
- 洛谷 P2048 BZOJ 2006 [NOI2010]超级钢琴
- Java复制文件的4种方式
- 李珣动态爱心代码教程
- 软件测试--IEEE829标准
- OSChina 周四乱弹 —— 帅帅帅,飞一般的感觉~
- VMware vRealize Suite 8.8.0
- 破解飞速!《星际2》可与电脑进行AI对战
- n1装哪个版本的linux,斐讯t1/N1是装Ubuntu,还是LinuxDeploy,哪个更好?
- Oracle 12C 新特性之 恢复表
- 第七届“华文奖”开展 特设主题向余光中致敬
- 车牌识别EasyPR--开发详解
- 基于御安全APK加固的游戏反外挂方案
- 机器视觉中坐标系转换
- Sql 修改表结构的操作
- ZZULIOJ 1800: 少水群多刷题
热门文章
- POPTEST老李谈Debug和Release的区别(c#) 1
- [JavaScript]JavaScript处理iframe的动作
- Visual Studio BI 中维度的KeyColumns属性
- jsp的九大内置对象和作用域
- 获得国内中国电信,网通,铁通的最新ip段的方法
- LOCK - 明确地锁定一个表
- Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.6 给自动检测组件命名...
- SharePoint PowerShell 批量删除遗弃视图
- 计蒜客 - 守望者的逃离
- Oracle创建一个用户并赋予其他用户表的访问权限