什么是辗转相除法?
在求解2个整数的最大公约数时,每次将余数作为除数,上一次的除数作为被除数,即不断的用除数去对余数取模,直到余数为0时,得到的除数即为辗转相除得到的最大公约数。
举个栗子: 用辗转相除法计算 60和250的最大公约数?
第一步: 250 % 60= 4 …10 余10
第二步: 60 %10=6 …0 刚好整除。
因此最大公约数为:10。
思路
通过比较两数,将大数作为上一次的被除数d, 小数作为上一次的除数c, 第一次取余index不等于0时,先将除数c赋值给被除数d,上一次结果得到的余数index作为本次的除数c,循环,直到index=0,就能得到最大公约数c。
python版
# 求2个整数的最大公约数, 使用辗转相除法,用被除数不断的除余数。将余数当作除数
def max_number(a, b):
# 定义c为除数,d为大数,为被除数
if a > b:
c = b
d = a
else:
c = a
d = b
index = d % c
while index != 0:
d = c
c = index
index = d % c
return c
target = max_number(18, 30)
print(target)
打印结果: 6
Java 版
package leetcode100;
/**
* 求2数的最大公约数问题
* 采用辗转相除法
*/
public class MaxDivisorProblem {
public static int findMaxDivisor(int one, int two) {
if (one == two) {
return one;
}
int greater;
int smaller;
if (one > two) {
greater = one;
smaller = two;
} else {
greater = two;
smaller = one;
}
int mod = greater % smaller;
while (mod != 0) {
greater = smaller;
smaller = mod;
mod = greater % smaller;
}
return smaller;
}
public static void main(String[] args) {
int result = findMaxDivisor(250, 60);
System.out.println("最大公约数为:" + result);
}
}
打印结果 :最大公约数为:10