最大公约数相信大家都会计算,但怎么借助 C++ 快速地计算呢?
下面这个式子是辗转相除法的数学表达:
输入格式
第一行输入一个整数 t(t ≤ 100)。
然后会有 t 行,每行有两个整数 x(1 ≤ x ≤ 10^9),y(1 ≤ y ≤ 10^9)。
输出格式
一共输出 t 行,每行输出 x, y 的最大公约数。
两种方法:
1. 函数方法:
#include <bits/stdc++.h>
using namespace std;
int gcd(int a, int b) {//找出最大公约数
int res;
if (b == 0) {
res = a;
} else {
res = gcd(b, a % b);
}
return res;
}
int main() {
int t, x, y;
cin >> t;
while (t--) {
cin >> x >> y;//直接单独输入
cout << gcd(x, y) << endl;
}
return 0;
}
2.循环方法:
#include <bits/stdc++.h>
using namespace std;
int main() {
int t, x, y;
cin >> t;
while (t--) {
cin >> x >> y;
int cnt = 0;//他是最大公约数
if (x < y) {
swap(x, y);
}//x要比y大,后面循环好弄,也可以让y比x大,但后面循环要改成i <= y
for (int i = 2; i <= x; i++/*要从2开始,因为任何数% 1都等于0*/) {
if (x % i == y % i && !(y % i)/*0为false,所以直接取反就行了*/) {
cnt = i;
}
}
cnt ? cout << cnt << endl : cout << 1 << endl;
}
return 0;
}//这种方法时间复杂度和空间复杂度较大, 建议使用上一种方法