题目:
给定 n 对正整数 ai,bi,请你求出每对数的最大公约数
第一行包含整数 n
接下来 n 行,每行包含一个整数对 ai,bi
输出共 n 行,每行输出一个整数对的最大公约数
2
3 6
4 6
3
2
递归写法(java):
public class 约数_最大公约数 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int m = in.nextInt();
while (m-- > 0) {
int a = in.nextInt(), b = in.nextInt();
System.out.println(gcd(a, b));
}
}
//如果b不等于0,继续gcd运算
//如果等于0,那么a此时的值就是a和b的最大公因数
public static int gcd(int a, int b) {
return b != 0 ? gcd(b, a%b) : a;
}
}
循环写法(这块是python啊,别拿去java直接用了):
def find_gcd(x, y):
reminder = x % y
while reminder != 0:
x = y
y = reminder
reminder = x % y
return y
举个栗子吧
q是quotient,r是reminder
x = 256 y = 188 q = 1 r = 68
x = 188 y = 68 q = 2 r = 52
x = 68 y = 52 q = 1 r = 16
x = 52 y = 16 q = 3 r = 4
x = 16 y = 4 q = 4 r = 0
gcd(256, 188) = 4
核心原理就是:
gcd(a, b) = gcd(b, a % b)
证明就不写了,这东西大家都学过
究极水题hhh
声明:算法思路来源为y总,详细请见https://www.acwing.com/
本文仅用作学习记录和交流