//判断是否是一个素数 Mark 标记数组 index 素数个数 voidolaPrime(){ int index = 0; memset(isPrime,true,sizeof(isPrime)); for(int i = 2; i < MAXSIZE; i++){ //如果i未被标记为非素数(即false)则得到一个素数 if(isPrime[i] == true){ prime[index++] = i; } //标记目前得到的素数的i倍为非素数 for(int j = 0; j < index && prime[j] * i < MAXN; j++){ isPrime[i * prime[j]] = false; if(i % prime[j] == 0){ break; } } } }
//如果空间不够用质数表也可以不用开始就开到最大 bool isnp[MAXN];//is not prime vector<int> primes; // 质数表 voidolaPrime(int n){ for (int i = 2; i <= n; i++){ if (!isnp[i]){ primes.push_back(i); } for (int p : primes){ if (p * i > n){ break; } isnp[p * i] = 1; if (i % p == 0){ break; } } } }