素数打表
一、打一张存储MAXN以内的所有素数的表:
int prime2[MAXN]; //用于存储每个素数 bool prime(int x) //判断是否为素数 { for(int i = 2; i*i <= x; i++) if(x % i == 0) return false; return true; } void GetPrime2() //打素数表 { int cnt = 0; for(int i =2; i <= MAXN; i++) if(prime(i)) prime2[cnt++] = i; }
二、筛法求素数,每个位置用于记录是否为素数
bool prime1[MAXN]; //保存是否为素数的状态,是则为true,否则为false void GetPrime1() //筛法求素数 { memset(prime1, true, sizeof(prime1)); prime1[0] = prime1[1] = false; for(int i = 2; i <= MAXN; i++) { if(prime1[i]) { for(int j = 2*i; j <= MAXN; j+=i) prime1[j] = false; } } }