埃式筛法
#include <bits/stdc++.h>
using namespace std;
bool vis[100000010]; //标记数组
int n;
int main(){
scanf("%d",&n);
vis[0]=vis[1]=1;
for(int i=2;i*i<=n;i++){ //优化1
if(vis[i]!=1){
for(int j=i*i;j<=n;j+=i){ //优化2
vis[j]=1; //0是质数,1不是
}
}
}
for(int i=2;i<=n;i++){
if(vis[i]==0){
cout<<i<<" ";
}
}
return 0;
}
欧拉筛
#include <bits/stdc++.h>
using namespace std;
bool vis[100000010];
int n,cnt=0,prime[10000000];
int main(){
scanf("%d",&n);
vis[0]=vis[1]=1;
for(int i=2;i<=n;i++){
if(!vis[i]){
prime[++cnt]=i;
}
for(int j=1;j<=cnt&&i*prime[j]<=n;j++){
vis[i*prime[j]]=1;
if(i%prime[j]==0){
break;
}
}
}
for(int i=1;i<=n;i++){
if(prime[i]==0)
break;
printf("%d ",prime[i]);
}
return 0;
}
文章来源地址https://www.toymoban.com/news/detail-613001.html
文章来源:https://www.toymoban.com/news/detail-613001.html
到了这里,关于关于质数筛——数论的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!