素数(Prime)问题:素数又称为质数,是指除1和本身之外,不能被其他数整除的一类数。1既不是素数也不是合数。
素数的判断:
bool isPrime(int n){
if(n<=1) return false;
int sqr=(int)sqrt(1.0*n);
for(int i=2;i<=sqr;i++){
if(n%i==0) return false;
}
return true;
}
素数表获取:
const int maxn=101;
int prime[maxn],pnum=0;//prime数组存放所有素数,pnum为素数个数
bool p[maxn]={false};//p[i]数组判断i是否是素数
void Find_Prime(){
for(int i=1;i<maxn;i++){
if(isPrime(i)==true){
prime[pnum++]=i;
p[i]=true;
}
}
}
埃氏筛法(Eratosthenes):可以证明其时间复杂度为O(nloglogn)。
const int maxn=101;
int prime[maxn],pnum=0;
bool p[maxn]={false};//p[i]=false表示i是素数
void Find_Prime(){
for(int i=2;i<maxn;i++){
if(p[i]==false){
prime[pnum++]=i;
for(int j=i+1;j<maxn;j+=i){
p[j]=true;
}
}
}
}