数据结构之数学问题

素数(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;
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/object__/article/details/85260442
今日推荐