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;
}
}
}