• Hdu2558(欧拉函数)


    /*

    欧拉函数ψ(N)=N{∏p|N}(1-1/p)亦即:ψ(N)=(P是数N的质因数)如:

    ψ(10)=10×(1-1/2)×(1-1/5)=4

    ψ(30)=30×(1-1/2)×(1-1/3)×(1-1/5)=8

    ψ(49)=49×(1-1/7)==42

    */

     

    #include<iostream>

    #include<cmath>

    using namespace std;

     

    int euler(int n){             //欧拉函数

           int ans = n;

           int s = sqrt((double)n);

           for(int i=2;i<=s; i++){

                  if(n % i == 0){

                         ans = ans / i * (i - 1);

                      while(n % i == 0)

                                n /= i;

                  }

           }

           if(n > 1)

                  ans = ans / n * (n - 1);

           return ans;

    }

     

    /*

    设a为大于等于m的n的一个约数,那么euler(n/a)表示的

    就是所有小于a与a互质的数的个数,设任一个数为x,那

    么这些数再乘以a就有gcd(n,x*a) = a;所以答案为所有n

    的约数ai大于等于m的值的euler(n/ai)之和

    */

     

    int main(){

           int t;

           cin>>t;

           while(t--){

                  int n, m;

                  cin>>n>>m;

                  if(m == 1){

                         cout<<n<<endl;

                         continue;

                  }

                  int ans = 0;

                  int s = sqrt((double)n);

                  for(int i=1; i<=s; i++){

                         if(n % i == 0){

                                if(i >= m)

                                       ans += euler(n / i);

                                if(n / i >= m)

                                       ans += euler(i);

                         }

                  }

                  if(n > 1 && s * s == n && s >= m)

                         ans -= euler(s);

                  cout<<ans<<endl;

           }

           return 0;

    }

  • 相关阅读:
    053403
    053402
    053401
    053400
    053399
    053398
    053397
    053396
    053395
    第k小数
  • 原文地址:https://www.cnblogs.com/cbyniypeu/p/3525884.html
Copyright © 2020-2023  润新知