学习到了辗转相减法(更相减损术)
可以用来求指数类型的最大公约数 ,分子分母分别求
最终可以得到N次方根的最简形式
#include<bits/stdc++.h>
using namespace std;
const int N = 110;
typedef long long LL;
LL a[N],b[N],c[N];
int n;
LL gcd(LL a, LL b) {
if (b) {
gcd(b, a % b);
}
else return a;
}
LL gcd_sub(LL a, LL b) {
if (a < b)
swap(a, b);
if (b == 1)return a;
else gcd_sub(b, a / b);
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
sort(a, a + n);
int cnt = 0;
for (int i = 1; i < n; i++) {
if (a[i] != a[i - 1]) {
LL d = gcd(a[i], a[0]);
b[cnt] = a[i] / d;
c[cnt] = a[0] / d;
cnt++;
}
}
LL up = b[0], down = c[0];
for (int i = 1; i < cnt; i++) {
up = gcd_sub(up, b[i]);
down = gcd_sub(down, c[i]);
}
cout << up << '/' << down << endl;
return 0;
}
辗转相除法 和 更相减损术 是两个东西
更相减损术 用来求大数的GCD
是辗转相减法 我打错了 不好意思