算法步骤
- 将
m
分解质因数; - 将
n
分解质因数; - 提取
m
和n
中的公共质因数; - 将
m
和n
中的公共质因数相乘, 乘积作为结果输出;
C++实现
int gcd(int m, int n) {
int res = 1;
for (int i = 2; i <= m / i || i <= n / i; i++) {
bool mflag = false, nflag = false;
int mcnt = 0, ncnt = 0;
if (m % i == 0) {
while (m % i == 0) {
m /= i;
mflag = true;
mcnt++;
}
}
if (n % i == 0) {
while (n % i == 0) {
n /= i;
nflag = true;
ncnt++;
}
}
if (mflag && nflag) {
int cnt = min(mcnt, ncnt);
while (cnt--) res *= i;
}
}
if (m == n) res *= m;
return res;
}