【代码模板】求质数(素数)
试除法
bool is_prime(int x) { if (x < 2) return false; for (int i = 2; i * i <= x; i++ ) if (x % i == 0) return false; return true; }
筛法
const int MAXV = 10000; //素数表范围 bool flag[MAXV+1]; //标志一个数是否为素数 int prime[MAXV+1]; //素数表,下标从0开始 int size; //素数个数 void genPrime(int max) { memset(flag, true, sizeof(flag)); for(int i = 2; i <= max / 2; i++) { if(flag[i]) { for(int j = i << 1 ; j <= max; j += i) { flag[j] = false; } } } for(int i = 2 ; i <= max; i++) { if(flag[i]) { prime[size++] = i; } } }