zoukankan      html  css  js  c++  java
  • HDU 1286

    欧拉函数

    φ函数的值  通式:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn),其中p1, p2……pn为x的所有质因数,x是不为0的整数。φ(1)=1(唯一和1互质的数(小于等于1)就是1本身)。 (注意:每种质因数只一个。比如12=2*2*3那么φ(12)=12*(1-1/2)*(1-1/3)=4
    若n是质数p的k次幂,φ(n)=p^k-p^(k-1)=(p-1)p^(k-1),因为除了p的倍数外,其他数都跟n互质。
    设n为正整数,以 φ(n)表示不超过n且与n互
    素的正整数的个数,称为n的欧拉函数值,这里函数
    φ:N→N,n→φ(n)称为欧拉函数。
    欧拉函数是积性函数——若m,n互质,φ(mn)=φ(m)φ(n)。
    特殊性质:当n为奇数时,φ(2n)=φ(n), 证明与上述类似。
    若n为质数则φ(n)=n-1。
     1 int eular(int n)
     2 {
     3     int ret=1,i;
     4     for(i=2;i*i<=n;i++)
     5     {
     6     if(n%i==0)
     7     {
     8         n/=i,ret*=i-1;
     9     while(n%i==0)
    10         n/=i,ret*=i;
    11     }
    12 }
    13     if(n>1)
    14         ret*=n-1;
    15     return ret;
    16 }
     1 #include<iostream>
     2 #include<cmath>
     3 using namespace std;
     4 int f(int n)
     5 {
     6     int i,ans=n;
     7     for(int i=2;i<=sqrt(n);++i){
     8         if(n%i==0)    {
     9             ans=ans/i*(i-1);
    10             while(n%i==0)    n/=i;    
    11         }
    12     }
    13     if(n>1)    ans=ans/n*(n-1);
    14     return ans;
    15 }
    16 int main()
    17 {
    18     int t,n;    cin >> t;
    19     while(t--){
    20         cin >> n;
    21         int ans=f(n);
    22         cout << ans << endl;
    23     }
    24 } 
  • 相关阅读:
    c#读取.config文件内容
    c# 读取配置文件方法
    C# Log4net详细说明
    C# 运算符集
    LeetCode 69_ x 的平方根
    LeetCode 172 _ 阶乘后的零
    LeetCode 171 _ Excel表列序号
    LeetCode 88 _ 合并两个有序数组
    LeetCode 581 _ 最短无序连续子数组
    LeetCode 283 _ 移动零
  • 原文地址:https://www.cnblogs.com/sasuke-/p/5152969.html
Copyright © 2011-2022 走看看