2588 欧拉函数的应用

来源:互联网 发布:淘宝钻展怎么开通 编辑:程序博客网 时间:2024/05/16 00:49

D = GCD(X,N)>=M,所以就是N = P*D , X = Q*D,所以P和Q一定互质,所以可以利用欧拉函数求解.

#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;typedef long long LL;LL euler ( LL x ){    LL res = x;    LL temp = x;    for ( int i = 2 ; i*i<= temp ; i++ )    {        if ( x%i == 0 )            res -= res/i;        while ( x%i==0 ) x/=i;    }    if ( x > 1 ) res -= res/x;    return res;    }int t;LL m,n;int main (){    scanf ( "%d" , &t );    while ( t-- )    {        LL sum = 0;        scanf ( "%lld%lld" , &n , &m );        for ( int i = 1 ; i*i <= n ; i++ )        {            if ( n %i ) continue;            if ( i >= m ) sum += euler( n/i );            if ( (n/i)>=m && i != (n/i) )                sum += euler( i );        }        cout << sum << endl;    }}


0 0