问题
分析
一般使用辗转相除法获得最大公约数
假设需要得知 a 和 b 的最大公约数 d
其中有 a % b = a - k * b 其中 k = a / b ,又 d 是 a 和 b 的最大公约数,所以 d 又是 a - k * b 的公约数,即又是 a % b 的最大公约数,通过不断的 a % b 直到 b = 0 ,此时剩下的整数 a 即最大公约数
代码
#include<iostream>
using namespace std ;
int gcd(int a, int b)
{
return b ? gcd(b, a % b) : a ;
}
int main()
{
int n ;
cin >> n ;
while(n --)
{
int a, b ;
cin >> a >> b ;
int res = gcd(a, b);
cout << res << endl ;
}
return 0 ;
}