zoukankan      html  css  js  c++  java
  • 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;

    }

  • 相关阅读:
    ubuntu 14.04 LTS 163更新源
    Windows 2008R2 修改SID
    ubuntu14 使用rsync远程备份文件
    vim常用
    Ubuntu创建lvm
    Windows 迁移本地用户配置文件到域用户
    Linux scp使用
    Centos 7 修改网卡名称、静态IP
    Axel多线程工具安装
    testlink 1.9.19安装
  • 原文地址:https://www.cnblogs.com/cbyniypeu/p/3525884.html
Copyright © 2011-2022 走看看