holiday/8.16/I-GCD.cpp
2022-08-18 08:24:59 +08:00

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);
}
}