#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
//求n的欧拉函数值
ll oula(int n){
ll ans=n;//n=1是 ans为1
//因为只和因子有关,所以只需看根号n内的就行
for(int i=2;i*i<=n;i++){
if(n%i==0){//找到n的因子
ans=ans-ans/i;//欧拉函数的公式(实质是减去因子i相关的数)
while(n%i==0) n/=i;//去除n里所有的因子i。保证了i是质数
//比如4=2*2,而所有2因子都被除去后,4不在是n的因子
}
}
if(n>1) ans=ans-ans/n;//因为n可能还没处理完,所有还要再用一遍欧拉公式。
//注意n再while处理下一直在变,所以最后留下来的n即是最后一个质因子
return ans;
}
ll f(int n,int m){
ll ans=0;
for(int i=1;i*i<=n;i++){
if(n%i) continue;//只看因子
//因为只和因子有关,所以只需看根号n内的就行,,对称可以通过i和n/i来看
if(i>=m&&i*i!=n) ans+=oula(n/i);
//i为 gcd 。i*i!=n 是防止重复算
if(n/i>=m) ans+=oula(i);
}
return ans;
}
int main(){
int t,n,m;
cin>>t;
while(t--){
scanf("%d%d",&n,&m);
cout<<f(n,m)<<endl;
}
return 0;
}
思路(copy)