题目链接 : 点击查看
题目描述 :
给定 n 对正整数 ai,bi,请你求出每对数的最大公约数。
输入输出 :
输入
2
3 6
4 6
输出
3
2
题目分析 :
欧几里得算法,又称辗转相除法。首先其算法核心是
求两个正整数 a 和 b 的 最大公约数 d
则有 gcd(a,b) = gcd(b,a%b)
当b == 0时, gcd(a, 0) = a;
我们在此不给出算法证明,只给出算法步骤,如下图。
用代码模拟即为 :
int gcd(int a, int b) {
return b ? gcd(b, a % b) : a;
}
下面我们给出题目整体代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
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;
cout << gcd(a, b) << endl;
}
return 0;
}