56 lines
685 B
C++
56 lines
685 B
C++
#include<iostream>
|
|
#include<cmath>
|
|
using namespace std;
|
|
int Euler(int n)
|
|
{
|
|
// if(n==1) return 1;
|
|
int res=n;
|
|
int len=sqrt(n);
|
|
for(int i=2;i<=len;i++)
|
|
{
|
|
if(n%i==0)
|
|
{
|
|
n/=i;
|
|
res=res-res/i;
|
|
// printf("(%d:%d)",i,res);
|
|
}
|
|
while(n%i==0)
|
|
{
|
|
n/=i;
|
|
}
|
|
}
|
|
if(n>1)//key!
|
|
res=res-res/n;
|
|
return res;
|
|
}
|
|
int main()
|
|
{
|
|
int t,n,m;
|
|
int ans;
|
|
scanf("%d",&t);
|
|
while(t--)
|
|
{
|
|
scanf("%d%d",&n,&m);//ÓÖÍüÁË&
|
|
int len=sqrt(n);
|
|
ans=0;
|
|
for(int i=1;i<=len;i++)
|
|
{
|
|
if(n%i!=0) continue;
|
|
if(i>=m&&i!=n/i)
|
|
{
|
|
ans+=Euler(n/i);
|
|
}
|
|
if(n/i>=m)
|
|
{
|
|
ans+=Euler(i);
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
// printf("%d:%d\n",n/i,ans);
|
|
}
|
|
printf("%d\n",ans);
|
|
}
|
|
}
|