/***************************************************/
// 测素数,根号阶
bool is_prime(int u)
{
if(u == 0 || u == 1) return false;
if(u == 2) return true;
if(u%2 == 0) return false;
for(int i=3; i <= sqrt(u) ;i+=2)
if(u%i==0) return false;
return true;
}
/***************************************************/
// 线性筛素数
const int M = 1000; // M : size
bool mark[M]; // true : prime number
void sieve_prime()
{
memset(mark, true, sizeof(mark));
mark[0] = mark[1] = false;// 0 not used, 1 is not prime
for(int i=2; i <= sqrt(M) ;i++) {// 2-> 4, 6, 8, ... //3->9, 12, 15...// 5->25, 30, ...
if(mark[i]) {
for(int j=i*i; j < M ;j+=i)
mark[j] = false;
}
}
}