很好的题目,想到欧拉函数了,不过看数据量3000组,估计会超时就没去想了。想不通上网查了一下,也是用欧拉函数做的,敲了一下就过了。
ACcode:
#include<cstdio>
#include<cstring>
int eular(int n)
{
int res=1;
for (int i=2;i*i<=n;i++)
if (n%i==0)
{
n/=i,res*=i-1;
while (n%i==0)
n/=i,res*=i;
}
if (n>1) res*=n-1;
return res;
}
int main()
{
int T,n,m,sum,i,k;
scanf("%d",&T);
while (T--)
{
sum=0;
scanf("%d %d",&n,&m);
for (i=1;i*i<n;i++)
if (n%i==0)
{
k=n/i;
if (i>=m)
sum+=eular(k);
if (k>=m)
sum+=eular(i);
}
if (i*i==n&&i>=m)
sum+=eular(i);
printf("%d\n",sum);
}
return 0;
}