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 } 
原文地址:https://www.cnblogs.com/sasuke-/p/5152969.html