质因数分解
vector<int> prime; //存储质因数
void PrimeFrac(int n){
for(int i=2; i<=srqt(n); i++){
if(n%i==0){
while(n%i == 0)
n/=i;
prime.push_back(i);
}
}
prime.push_back(n); //最后剩下的是最大的那个质因数
}
在计算的过程中,如果 n % i = = 0 n\%i==0 n%i==0,那么 i i i一定是质数,因为此时 n n n一定没有小于 i i i的因数。
需要注意的是,如果 n n n是合数,它一定有小于等于 s q r t ( n ) sqrt(n) sqrt(n)的质因数。因此算法的复杂度为 O ( n ) O(\sqrt n) O(n)。
需要质因数分解的题目有很多
一个不错的例题是
https://codeforces.com/problemset/problem/1114/C 哦~~