/***************************************************/ // 测素数,根号阶 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; } } }