3999. 最大公约数 - AcWing题库高质量的算法题库https://www.acwing.com/problem/content/description/4002/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int t;
ll a, m;
int main() {
cin >> t;
while (t--) {
cin >> a >> m;
ll d = __gcd(a, m);
ll n = m / d;
ll res = n;
// 欧拉函数求<=n的正整数中与n互质的数的个数
for (ll i = 2; i * i <= n; i++) {
if (n % i == 0) { // i是n的质因数
res -= (res / i);
while (n % i == 0) { // 在n中去掉i这个质因数
n /= i;
}
}
}
if (n != 1) { // 除到最后剩下一个质因数不是1
res -= (res / n);
}
cout << res << endl;
}
}