D
题意:
给你两个整数
和
,然后让你计算使
成立
的数量。
思路:
其实这道题目相比而言并不是很难,但是我却没有思路。
有一点我也没有注意,就是变量关系是
已知
,
,
根据最大公约数的性质
所以如果
那么
即 可以写成
我们令
则有
我们设
有
显然有 ,故答案变成了在 有多少数与 互质,即
const ll N = 1e5 + 10;
ll phi(ll x){
ll ans = x;
for(ll i = 2; i*i <= x; i++){
if(x % i == 0){
ans = ans / i * (i-1);
while(x % i == 0) x /= i;
}
}
if(x > 1) ans = ans / x * (x-1);
return ans;
}
int main(){
int t;
cin >>t;
while(t --){
ll n,m;
cin >>n >> m;
ll d = __gcd(n,m);
cout<<phi(m/d)<<endl;
}
}