点我看题目
已知gcd(a,m)=gcd(a+x,m).
可以推得x的个数就是φ(m/d)
其中d=gcd(a,m) (x=0也算一种情况)
总的来说就是x=φ(m/gcd(a,m))
直接套板子求就行了
推法参考
可以直接记住结论方便下次使用
#include<bits/stdc++.h>
using namespace std;
long long n,m,t,k=0,a,l,p;
int main()
{
cin>>t;
while(t--)
{
cin>>a>>m;
n=m/__gcd(a,m);
k=n;
for(long long i=2;i*i<=n;i++)
{
if(n%i==0)
{
k/=i;
k*=(i-1);
while(n%i==0)
{
n/=i;
}
}
}
if(n!=1)
k-=k/n;
cout<<k<<endl;
}
return 0;
}
代码是这里的
============================================================
written by ZJUT \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\