hdu2588欧拉函数

思路:分析:假设x<=n,n=p*d,x=q*d.假设n与x的最大公约数为d,则能够推出p与q肯定是互质的,因为x<=n所以要求的就是p的欧拉函数值了,那么我们就转化成求满足:n=p*d,并且d>=m的p的欧拉函数值之和了。

#include
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;
}

你可能感兴趣的:(ACM--数学)