5个gcd(手搓)
5 种 GCD方法
// 更相减损术
int gcd(int a, int b) {
while (a != b) {
if (a > b) {
a -= b;
} else {
b -= a;
}
}
return a;
}
// 递归版
int gcd(int a, int b) {
return a == b ? a : a > b ? gcd(a - b, b) : gcd(a, b - a);
}
// 辗转相除法
int gcd(int a, int b) {
while (b != 0) { // 只要b不等于0,就继续迭代
int tmp = b;
b = a % b;
a = tmp;
}
return a;
}
// 递归版
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
// 素因子分解法
int gcd(int a, int b) {
int yz = 1; // 定义变量 yz,初始值为 1
for (int i = 2; i <= b; i++) { // 从 2 到 b 枚举可能的因子
if (a % i == 0 && b % i == 0) { // 如果 i 是 a 和 b 的公因子
a /= i; // 将 a 除以 i,去除公因子
b /= i; // 将 b 除以 i,去除公因子
yz *= i; // 将 i 乘入 yz,记录公因子
i--; // i 需要再次枚举,所以减一
}
}
return yz; // 返回最大公因数
}

浙公网安备 33010602011771号