1.素数的概念
素数又称质数,是指除了1和本身之外,不能被其他数整除的一类数,反之,则称为合数。
注意:1既不是质数也不是合数。
2.素数的判断
(1)试除法:逐一测试2~√n,确保无一能被整除。
暴力法:直接不断对从2~√n取余,若能整除则不是质数。
bool isPrime(int n){
if(n <= 1){
return false; //1不是素数
}
int sqr = (int) sqrt(1.0 * n); //根号n
for(int i=2;i <= sqr;++i){
if(n % i == 0){ //注意是取余,而不是除法
return false;
}
}
return true;
}
若上面的代码可以有效的判断n是否为素数。
3.素数的筛法
(1)埃式筛
基本思想:质数的倍数一定不是素数。
const int MAXN=1000001;
void initFactorTable(){
for(int i=2;i<MAXN;i++){
if(factor[i]==0){
for(int j=i;i<MAXN;j+=i){
factor[j]=i;
}
}
}
}
这样就能得到一个factor[]数组,且这个数组内都是素数。
4.注意点
- 上述代码中,
sqrt()
的作用为一个浮点数开根号。由于sqrt的参数要求是浮点数,因此在n前面乘以1.0来使其变成浮点数。 - 埃式筛还可以用于求解一个数的质因数。