codeforces-Ed81-D
七月 08, 2020
题意
求有多少x符合gcd(a+x,m)=gcd(a,m)=gcd;
且m>x>=0;
直接求phi[m/gcd(a,m)];
存在gcd(y,m)=gcd(a,m) y<a:
但由于a+x>m,
gcd(y,m)=gcd(y+m,m) (更相减损术)
y+m>=a且 y+m<a+m
[a,a+m]中总有一个数z可以通过更相减损变成y
所以问题变成了有多少个y<a 使得gcd(y,m)=gcd(a,m)
这里用到一个性质gcd(y,m)=gcd(a,m)=d -> 两边同除d -> gcd(y,m/d)=1
那问题又从有多少个y<a 使得gcd(y,m)=gcd(a,m) 变成了有多少个 小于m/gcd(a,m)的数与m/gcd(a,m)互质 这个就是欧拉函数所表示的 phi [n]= 有多少个[i<n] gcd(i,n)==1
即1到m/gcd(a,m)中与m/gcd(a,m)互质的个数 == phi[m/gcd(a,m)]
gcd(y,m)==gcd的数量其实就是 gcd(a+x,m) ==gcd (a+x>=m) 的数量
1 |
|
查看评论