普通线性筛
#include<bits/stdc++.h>
using namespace std;
const int MAXN=10000003;
int prime[MAXN];
int tag[MAXN];
int main()
{
int n,m;cin>>n>>m;
fill(prime,prime+MAXN,1);
prime[0]=prime[1]=0;
int t=0;
for(int i=2;i<MAXN;i++){
if(prime[i]==1) tag[t++]=i;
for(int j=0;j<t&&tag[j]*i<MAXN;j++){
prime[i*tag[j]]=0;//筛掉小于等于i的素数和i的积构成的合数
}
}
for(int i=0;i<m;i++){
int a;cin>>a;
if(prime[a]==1) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}
另一种素数筛法参考:https://blog.youkuaiyun.com/huang_miao_xin/article/details/51331710
#include<bits/stdc++.h>
using namespace std;
bool isprime(int x){
if(x==1) return false;
if(x==2||x==3) return true;
if(x%6!=1&&x%6!=5) return false;
for(int i=5;i<=sqrt(x);i+=6){
if(x%i==0||x%(i+2)==0) return false;
}
return true;
}
int main()
{
int n,m;cin>>n>>m;
for(int i=0;i<m;i++){
int t;cin>>t;
if(isprime(t)) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}
本文介绍了一种高效的素数筛选方法——普通线性筛法,并提供了一个简单的素数判断函数。通过C++代码实现,展示了如何快速找出一定范围内的所有素数,以及如何判断一个数是否为素数。
1233

被折叠的 条评论
为什么被折叠?



