namespace RC{ typedeflonglong LL; int T, N, num; LL A, B; int a[100]; voidprime(int n){ num = 0; for (int i = 2; i*i <= n; i++) { if ((n%i) == 0) { num++; a[num] = i; while ((n%i) == 0) { n /= i; } } } if (n > 1) { num++; a[num] = n; } return; } // 容斥原理 求 1-r 不被n的质因子整除的个数 LL solve(LL r, int n){ prime(n); LL res = 0; for (int i = 1; i < (1 << num); i++) { int kk = 0; LL div = 1; for (int j = 1; j <= num; j++) { if (i&(1 << (j - 1))) { kk++; div *= a[j]; } } if (kk % 2) res += r / div; else res -= r / div; } return r - res;
intgcd(int a,int b){ return b?gcd(b,a%b):a; } voidsolve(){ int a,m;cin>>a>>m; int t = gcd(a,m); int l = (a+t-1)/t; int r = (m+a-1)/t; m = m/t; cout << RC::que(l,r,m) << endl; }
signedmain() { int t;cin>>t; while(t--) solve(); return0; }