13-素数打表

void ssdb(){
	int i, j, k = 0;
	for(i = 2; i <= sqrt(MAX); i++)
		for(j = i * i; j <= MAX; j += i)
			db[j] = 1;
	for(i = 1; i < MAX; i++)
		if(db[i] == 0)
		{
			ss[k++] = i;
			printf("%d ", ss[k - 1]);
		}
		printf("sushu: %d", k);
}

  

/*
 * 素数筛选,判断小于 MAXN 的数是不是素数。
 * notprime 是一张表,为 false 表示是素数, true 表示不是素数
 */
 const int MAXN=1000010;
 bool notprime[MAXN];//值为 false 表示素数,值为 true 表示非素数
 void init(){
	 memset(notprime,false,sizeof(notprime));
	 notprime[0]=notprime[1]=true;
	 for(int i=2;i<MAXN;i++)
		if(!notprime[i]){
			if(i>MAXN/i)continue;//防止后面 i*i 溢出 (或者 i,j 用 long long)
		//直接从 i*i 开始就可以,小于 i 倍的已经筛选过了, 注意是 j+=i
			for(int j=i*i;j<MAXN;j+=i)
				notprime[j]=true;
		}
 }
2.1.2 素数筛选(筛选出小于等于 MAXN 的素数)
/*
* 素数筛选,存在小于等于 MAXN 的素数
* prime[0] 存的是素数的个数
*/
const int MAXN=10000;
int prime[MAXN+1];
void getPrime(){
	memset(prime,0,sizeof(prime));
	for(int i=2;i<=MAXN;i++){
		if(!prime[i])
			prime[++prime[0]]=i;
		for(int j=1;j<=prime[0]&&prime[j]<=MAXN/i;j++){
			prime[prime[j]*i]=1;
			if(i%prime[j]==0) break;
		}
	}
}

  

猜你喜欢

转载自www.cnblogs.com/zhumengdexiaobai/p/9583740.html