一类问题:对于一个整数n,将n进行质因数分解
算法1:
根据定义直接枚举,直接给出代码:
void Decom(int n) {
int i;
vector<int> res;
for(i = 2; i <= n; i++) {
while(n%i == 0) {
res.push_back(i);
n /= i;
}
}
for(i = 0; i < res.size()-1; i++) printf("%d*", res[i]);
printf("%d\n", res.back());
}
算法2:
考虑到若有 i 满足n % i == 0
,则必有n % (n/i) == 0
,所以可以仅枚举
void Decom(int n) {
int i;
vector<int> res;
for(i = 2; i*i <= n; i++) {
while(n%i == 0) {
res.push_back(i);
n /= i;
}
}
for(i = 0; i < res.size()-1; i++) printf("%d*", res[i]);
printf("%d\n", res.back());
}
Pollard-Rho算法:
该算法需要使用的大素数判定的 Miller - Rabin 算法,之前已经讨论过。
Miller-Rabin算法戳这里
对于一个大整数n,我们取任意一个数 x 使得