质数判断与欧拉筛(线性筛)
质数定义
质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
在整个自然数集合中,质数的数量不多,分布比较稀疏,对于一个足够大的整数
质数的判定
试除法
概述
我们只需要扫描2~
该算法时间复杂度为
模板代码
bool isPrime(int n){
if(n<2) return 0;
for(int i=2;i<=sqrt(n);i++){
if(n%i==0) return 0;
}
return 1;
}
质数的筛选
埃氏筛
由于其时间复杂度并非最小,在此不做介绍
欧拉筛(线性筛法)
概述
线性筛法通过“从大到小累积质因子”的方式标记每个合数
模板代码
int n,Prime[100010],cnt;
bool isPrime[100010];
void check(){
memset(isPrime,1,sizeof(isPrime));
isPrime[1]=0;
for(int i=2;i<=n;i++){
if(isPrime[i]) Prime[++cnt]=i;
for(int j=1;j<=cnt&&i*Prime[j]<=n;j++){
isPrime[i*Prime[j]]=0;
if(!i%Prime[j]) break;
}
}
}
例题
P1304 哥德巴赫猜想
P1075 [NOIP2012 普及组] 质因数分解
P1579 哥德巴赫猜想(升级版)
P1036 [NOIP2002 普及组] 选数
P2626 斐波那契数列(升级版)
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)