埃氏筛+欧拉筛 (c++)
求出从2到n的素数
埃氏筛
- 方法:筛2的倍数,3的倍数,4的倍数......
- 时间复杂度:O(n·loglogn)
- 缺点:一个数筛了多次,比如6会被2筛,被3筛,被6筛,浪费时间
- 下面的代码中,f是是否是素数的标记数组,N是要筛的个数
f[1]=1; for (int i=2; i*i<=N; i++) if (f[i]==0){ for (int j=i+i; j<=N; j+=i) f[j]=1; }
欧拉筛(线性筛)
- 方法:每个数只被它最小的素因子筛一次
- 时间复杂度:O(n)
- 下面的代码中,ISP是是否为素数标记,p为存放素数的数组,p_c为当前素数个数,n为要筛的数的个数(第1行使用memset要写
#include<cstring>
或#include<string.h>
memset(isp,true,sizeof isp); isp[1]=false; for(int i=2;i<=n;i++){ if(isp[i]) p[++p_c]=i; for(int j=1;j<=p_c && i*p[j]<=n;j++){ isp[i*p[j]]=false; if(i%p[j]==0) break; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具