线性筛求素数 (板子
详细见:http://blog.csdn.net/nk_test/article/details/46242401
#include<bits/stdc++.h> using namespace std; const int maxn = 1e7; bool vis[maxn]; int prime[maxn]; int f(int n)//计算从1到n的素数个数 { int cnt =0; memset(vis,0,sizeof(vis)); for(int i=2;i<=n;i++) { if(!vis[i]) prime[cnt++] = i; for(int j=0;j<cnt && i*prime[j]<=n;j++) { vis[i*prime[j]]=1; if(i%prime[j]==0) break; } } return cnt; } /*当 i 能整除 prime[j] 那么 i*prime[j+1] 这个合数肯定被 prime[j] 乘以某个数筛掉。 因为i中含有prime[j], prime[j] 比 prime[j+1] 小。*/ int main () { int n;cin>>n; cout<<f(n)<<endl; return 0; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步