判断单个数是否为素数
#include <math.h>
bool isPrime(int n) {
int srt = (int)sqrt(n * 1.0);
for (int i = 2; i <= srt; i++) {
if (n % i == 0)
return false;
}
return true;
}
打表
#define MAXN 1000000 //寻找MAXN以内的所有素数
int prime[10010], plen = 0; //素数存储在prime数组里
bool mark[MAXN] = {0}; //记录下标对应的数是否为合数,
void getPrime() {
for (int i = 2; i < MAXN; i++) { //遍历所有数
if (mark[i]) //已经被记录不是素数则跳过
continue;
prime[plen] = i; //否则是素数
plen++;
for (int j = i * i; j < MAXN; j += i) //将该素数的倍数记录为合数, 从i * i开始即可
mark[j] = true;
}
}
参考
《王道机试指南》
3738

被折叠的 条评论
为什么被折叠?



