2/23质数
质数:在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数
小于等于N大概有lgN个质数
质数的判定
试除法 判断一个数N:O(√N)
扫描2-√N之间所有整数,一次检查它们能否整除N
质数筛:求出小于等于n的所有质数,特判v[1]=1
i从小到大,如果i
没有被前面的数(比它小的数)标记为合数,那i
就是素数,加入素数列表
用已经筛选出来的素数去过滤所有能够被它整除的数
埃及筛 O(NloglogN)
扫描2-N,若这个数未被标记,则把它的倍数标记为合数
->会重复标记合数
void shai() {
v[1]=1; for(int i=2;i<=n;i++) if(v[i]) continue; for(int j=i;j*i<=n;j++) v[i*j]=1;//合数 }
欧拉筛 O(N)
用已经筛选出来的素数去过滤所有能够被它整除的数,使得每个合数只会被它的最小质因子筛一次(一开始i很小的时候一次能筛掉很多素数,后面超过n/2之后就几乎不用做什么事情了)
用当前的数×之前的筛出来的素数,这个数即为合数
void shai() { v[1]=1; cnt=0; for(int i=2;i<=maxn;i++) { if(!v[i]) prime[++cnt]=i; for(int j=1;j<=cnt&&i*prime[j]<=maxn;j++) { v[i*prime[j]]=1; if(i%prime[j]==0) break; } } }
莫名其妙的一步...
if(i%prime[j]==0) break;
设当前数为a=b*c
若b是a的最小质因数,c的最小质因数比不小于b,保证了c筛掉前a不会被筛掉
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)