求字的最大公约数
辗转相除法
java代码实现
private static int gcd(int a, int b) {
while (a % b != 0) {
int z = a % b;
a = b;
b = z;
}
return b;
}
求多个数的最大公约数
对于多个数的最大公约数,大概是这么一个情况
先求出前面的数的最大公约数,得到的结果和后面的数继续求最大公约数
代码实现
private static int gcd(int[] nums) {
int num = nums[0];
for (int i = 1; i < nums.length; i++) {
num = gcd(num, nums[i]);
}
return num;
}
private static int gcd(int a, int b) {
while (a % b != 0) {
int z = a % b;
a = b;
b = z;
}
return b;
}
为什么可以这样
对于多个数求最大公约数,先把每个数变成质数相乘的形式
63 = 3 * 3 * 7
18 = 2 * 3 * 3
9 = 3 * 3
45 = 5 * 3 * 3
求他们的最大公约数,无非就是找到他们相同的质数
对于找n个数的相同的质数部分,是不是就等于找到前n-1个数的质数相同的部分以后,再和当前数找最大相同质数部分。
这里说得不是很清,水平有限😢