当前位置: 代码迷 >> 综合 >> 最大公约数(欧几里得/辗转相除法)
  详细解决方案

最大公约数(欧几里得/辗转相除法)

热度:0   发布时间:2023-12-22 13:57:39.0

题目链接
题意:给定n对正整数ai,bi,请你求出每对数的最大公约数。
输入格式
第一行包含整数n。
接下来n行,每行包含一个整数对ai,bi。
输出格式
输出共n行,每行输出一个整数对的最大公约数。
数据范围
1≤n≤1e5,
1≤ai,bi≤2?1e9
输入样例:
2
3 6
4 6
输出样例:
3
2
思路:常识知识:如果a%d = 0 && b%d = 0, 那么(a + b)%d = 0,甚至(ax + by)%d = 0; 所以 gcd(a, b) = gcd(b, a % b).
代码实现:

#include<iostream>
using namespace std;
//辗转相除求gcd的模板函数
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;
}