素数打表:
const int MAX = 1000005;
int prime[MAX], len=0;
bool is_prime[MAX];
void init() {
memset(is_prime,true,sizeof is_prime);
for(int i=2; i*i<MAX; i++) {
if(is_prime[i]) {//是素数
prime[len++]=i;//存起来
for(int j=i*2; j<MAX; j+=i)//从2倍开始,n倍
is_prime[j]=false;//各个倍数
}
}
}
判断一个数是不是素数:
bool isPrime(int num){
if (num == 2 || num == 3)
return true;
if (num % 6 != 1 && num % 6 != 5)
return false;
for (int i = 5; i*i <= num; i += 6)
if (num % i == 0 || num % (i+2) == 0)
return false;
return true;
}