素数及其应用
1. 素数判断
// 用 sqrt 函数
bool isPrime(int n){
if(n<=1) return false;
int sqr=(int)sqrt(1.0*n);
for(int i=2;i<=sqr;i++){
if(n%i==0) return false;
}
return true;
}
// 更简洁写法
bool isPrime(int n){
if(n<=1) return false;
for(int i=2;i*i<=n;i++){
if(n%i==0) return false;
}
return true;
}
2. 素数表获取
素数表的获取一种是逐个判断是否为素数,复杂度为 O(n√n)
还有一种是埃式(Eratosthenes)筛法,复杂度为 O(nloglogn)
const int maxn=101; // 范围限定为100以内
int prime[maxn], pnum=0;
bool p[maxn]={0};
void findPrime(){
for(int i=2;i<maxn;i++){
if(p[i]==false){
prime[pnum++]=i;
for(int j=i+i;j<maxn;j+=i){
p[j]=true;
}
}
}
}
3. 质因子分解
可对每个质因子计算其阶数,设质因子 的阶数为 ,共有 n 个质因子,则
- 因子个数为
- 所有因子的和为
4. ChangeLog
2018.09.04 初稿