#include<bits/stdc++.h> using namespace std; int flag[100000];
void askprime(){ flag[1]=1;//1既不是质数也不是合数 for(int i=2;i<=sqrt(100000);i++)//从1到sqrt(n) { if(flag[i]==0) { for(int j=2;i*j<=sqrt(100000);j++) { flag[i*j]=1;//打上标记 }//将素数后的倍数筛掉 } } }//筛出1~100000的素数 int main() { askprime(); for(int i=1;i<=100;i++) { if(flag[i]==0) cout<<i<<" "; } }
欧几里德筛法
#include<bits/stdc++.h> using namespace std; int prime[1005]; int isntprime[1005]={0,0}; int prime_num; void askprime() { for(int i=2;i<=1005;i++)//已知质数 { if(isntprime[i]==0) { prime[prime_num]=i; prime_num++; } for(int j=0;j<prime_num&&i*prime[j]<1005;j++) { isntprime[i*prime[j]]=1;//往后筛 if(i%prime[j]==0) break;//i第一个%到的prime[j]一定是这个合数最小的质因子 } } } int main() { askprime(); int a; cin>>a; if(binary_search(prime+0,prime+102,4)==true) cout<<"Yes"<<endl;//找到返回1,没找到返回0 else cout<<"No"<<endl; }//后面元素的值一定比前面元素的值大 //前面元素乘上一个比自己最小质因数大的数 //后面元素乘上一个比自己最小质因数小的数