FML
题解 #
让,所以我们有,不难发现,如果我们想要使, 必须是的倍数,设。而且,和必须要互质,所以我们要找到从到中与互质的数的个数。对于那些大于的数,如果 那么。又因为,所以我们真正要算的是比小并且与互质的数的个数,也就是。
Code #
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll Phi(ll m){
ll ans=m;
for(ll i=2;i*i<=m;i++){
if(m%i==0){
ans-=ans/i;
while(m%i==0) m/=i;
}
}
if(m>1) ans-=ans/m;
return ans;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int tt;
cin>>tt;
while(tt--){
ll a,m;
cin>>a>>m;
cout<<Phi(m/gcd(a,m))<<endl;
}
return 0;
}