题目描述
求2个整数a、b(a>b)的最大公约数。
输入
多组测试数据,第一行输入整数T,表示组数 然后是T行,每行输入2个整数分别代表a和b
输出
对于每组测试数据输出1行,值为a和b的最大公约数
样例输入 Copy
2 18 12 6 5
样例输出 Copy
6 1
#include <stdio.h>
int main() {
int T;
int a, b;
scanf("%d", &T);
for (int i = 1; i <= T; i++) {
scanf("%d%d", &a, &b);
printf("%d\n", gcd(a, b));
}
}
//使用辗转相除法解决
int gcd(int a, int b) {
int temp;
while (b != 0) {
temp = a % b;
a = b;
b = temp;
}
return a;
}
算法提示:辗转相除法
要计算两个整数 a 和 b 的最大公约数(Greatest Common Divisor,GCD),可以使用欧几里德算法(Euclidean Algorithm)。这个算法的基本思想是利用辗转相除的原理,即不断用较小数去除较大数,直到余数为0为止,此时的除数就是最大公约数。