思路:分析:假设x<=n,n=p*d,x=q*d.假设n与x的最大公约数为d,则能够推出p与q肯定是互质的,因为x<=n所以要求的就是p的欧拉函数值了,那么我们就转化成求满足:n=p*d,并且d>=m的p的欧拉函数值之和了。
#include<iostream>
using namespace std;
int Euler(int n)
{
int val=n, i;
for (i=2; i*i<=n; i++)
{
if ( n%i==0 )
{
val=val/i*(i-1);
while ( n%i==0 )
n/=i;
}
}
if( n>1 ) val=val/n*(n-1);
return val;
}
int main()
{
int n, T, m, pi, i, val;
cin >> T;
while ( T-- )
{
cin >> n >> m;
val=0;
for (i=1; i*i<=n; i++)
{
if ( n%i==0 )
{
if( i>=m )
val+=Euler(n/i);
if ( (n/i)!=i && (n/i)>=m )
val+=Euler(i);
}
}
cout << val << endl;
}
return 0;
}