Codeforces 1295D Same GCDs (欧拉定理)

Description:

You are given two integers a and m. Calculate the number of integers xxx such that 0x<m0≤x<m0≤x<m and gcd(a,m)=gcd(a+x,m).gcd(a,m)=gcd(a+x,m).gcd(a,m)=gcd(a+x,m).

Note: gcd(a,b)gcd(a,b)gcd(a,b) is the greatest common divisor of aaa and bbb.

Input

The first line contains the single integer T(1T50)T (1≤T≤50)T(1≤T≤50) — the number of test cases.

Next T lines contain test cases — one per line. Each line contains two integers aaa and m(1a<m1010)m (1≤a<m≤10^{10})m(1≤a<m≤1010).

Output

Print TTT integers — one per test case. For each test case print the number of appropriate xs.x-s.x−s.

Example

input

3
4 9
5 10
42 9999999967

output

6
1
9999999966

Note

In the first test case appropriate xsx-sx−s are [0,1,3,4,6,7][0,1,3,4,6,7][0,1,3,4,6,7].

In the second test case the only appropriate xxx is 000.

题意:

给出两个正整数 aaa 和 mmm ,再给出 xxx 的范围为[0,m)[ 0 , m )[0,m),现在要求满足 gcd(a,m)=gcd(a+x,m)gcd ( a , m ) = gcd ( a + x , m )gcd(a,m)=gcd(a+x,m) 时 xxx 的个数。

首先提取 aaa 和 mmm的最大公约数 ggg,令 a=xgm=yga=xg,m=yga=xg,m=yg

题意就可转化为需要使得 gcd(xg,yg)=gcd(xg+z,yg)=ggcd(xg,yg) = gcd(xg+z,yg) = ggcd(xg,yg)=gcd(xg+z,yg)=g

显然可知 zzz为 ggg 的倍数,令 z=kg,k[0,y)z = kg,k ∈[0,y)z=kg,k∈[0,y)

那么所有满足 gcd(x+k,y)=1gcd(x+k,y) = 1gcd(x+k,y)=1的 kkk 都可以,即求 [x,x+y)[x,x+y)[x,x+y) 中与 yyy 互素数的个数。

因为 gcd(x,y)=gcd(y,y%x)gcd(x,y) = gcd(y,y\%x)gcd(x,y)=gcd(y,y%x),故当 x+k(y,x+y)x+k∈(y,x+y)x+k∈(y,x+y) 时,gcd(x+k,y)=gcd(y,(x+k)%y)gcd(x+k,y) = gcd(y,(x+k)\%y)gcd(x+k,y)=gcd(y,(x+k)%y),

因为 x<y,k[0,y)x<y,k ∈[0,y)x<y,k∈[0,y) ,所以 gcd(x+k,y)=gcd(y,(x+k)y)=1gcd(x+k,y)=gcd(y,(x+k)-y) =1gcd(x+k,y)=gcd(y,(x+k)−y)=1

x+ky(0,x)x+k-y∈(0,x)x+k−y∈(0,x)

所以 (y,x+y)(y,x+y)(y,x+y) 中与 yyy 互素数的个数与 (0,x)(0,x)(0,x) 中与与 yyy 互素数的个数相等。

所以答案就是 [1,y][1,y][1,y] 中与 yyy 互素数的个数。

Codeforces 1295D Same GCDs (欧拉定理)Codeforces 1295D Same GCDs (欧拉定理) 邵光亮 发布了611 篇原创文章 · 获赞 390 · 访问量 20万+ 他的留言板 关注
上一篇:对C++容器类vector的一点理解


下一篇:CodeForces - 1388A Captain Flint and Crew Recruitment