🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 素数及其应用 ## 素数判断 ```c++ // 用 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; } ``` ## 素数表获取 - 素数表的获取一种是逐个判断是否为素数,复杂度为 O(n√n) - 还有一种是埃式(Eratosthenes)筛法,复杂度为 O(nloglogn) ```C++ 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; } } } } ``` ## 质因子分解 可对每个质因子计算其阶数,设质因子 $$p_i$$ 的阶数为 $$e_i$$ ,共有 n 个质因子,则 - 因子个数为 $$\Pi_{i=1}^n e_i$$ - 所有因子的和为 $$\Pi_{i=1}^n (1+p_i+\cdots +p_i^{e_i})=\Pi_{i=1}^n \frac{1-p_i^{e_i+1}}{1-p_i}$$ ## ChangeLog > 2018.09.04 初稿