Algorithm,Number Theory,Prime

/***************************************************/
// 测素数,根号阶
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;
          }
     }
}
原文地址:https://www.cnblogs.com/threef/p/3210451.html