欧拉筛是一种用于筛出质数的算法。
欧拉筛的时间复杂度为O(n),其实现主要依赖于,对任意一个合数p,只通过其最小的约数筛掉。实现过程如下:
1.首先建
2.循环遍历,设当前的数为
3.遍历
注1:对于
则表明primes[j]是i的一个因子,又由于是i的一个因子,所以显然
早的时候就已经被筛掉,所以此时break掉保证了一个数只会被其最小的因子筛掉。(例,
上,当
代码如下:(这个是Acwing上的题目)
using namespace std;
const int N = 1000010;
int st[N],primes[N];
int get_primes(int x){
int cnt = 0;
for(int i = 2;i <= x;i++){
if(!st[i]) primes[++cnt] = i; //如果i是质数,就添加到primes数组中
for(int j = 1;i * primes[j] <= x;j++){
st[i * primes[j]] = true; //筛掉i*primes[j]
if(i % primes[j] == 0) break;//保证一个数不会被反复筛掉
}
}
return cnt;
}
int main(){
int n; cin >> n;
printf("%d\n",get_primes(n));
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现