欧拉函数

Posted DukeLv

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了欧拉函数相关的知识,希望对你有一定的参考价值。

定义和简单性质

欧拉函数在OI中是个非常重要的东西,不知道的话会吃大亏的.

欧拉函数用希腊字母φ表示,φ(N)表示N的欧拉函数.

对φ(N)的值,我们可以通俗地理解为小于N且与N互质的数的个数(包含1).

欧拉函数的一些性质:

1.对于素数p, φ(p)=p-1,对于对两个素数p,q φ(pq)=pq-1

欧拉函数是积性函数,但不是完全积性函数.

2.对于一个正整数N的素数幂分解N=P1^q1*P2^q2*...*Pn^qn.

 

   φ(N)=N*(1-1/P1)*(1-1/P2)*...*(1-1/Pn).

 

3.除了N=2,φ(N)都是偶数.

 

4.设N为正整数,∑φ(d)=N (d|N).

 

根据性质2,我们可以在O(sqrt(n))的时间内求出一个数的欧拉函数值.

 

如果我们要求1000000以内所有数的欧拉函数,怎么办.

上面的方法复杂度将高达O(N*sqrt(N)).

我们来看看线性筛法的程序:

#include<iostream>
#include<cstdio>
using namespace std;
int euler[100];
int Max = 100;
void Init(){     
     euler[1]=1;    
     for(int i=2;i<Max;i++)    
       euler[i] = i;    
     for(int i = 2;i < Max;i++)    
        if(euler[i] == i)    
            for(int j = i;j < Max;j += i)  //注意,j += i
               euler[j] = euler[j] / i * (i - 1);//先进行除法是为了防止中间数据的溢出     
}
int main()
{
    int a; 
    cin>>a;
    Init();
    cout<<euler[a];
    return 0;
}

 

妙啊!!!!!!!!!!!

 


 

以上是关于欧拉函数的主要内容,如果未能解决你的问题,请参考以下文章

欧拉Euler函数

HDU 2588 GCD(欧拉函数)

蓝桥杯必备算法一:欧拉函数

数论之旅4---欧拉函数的证明及代码实现(我会证明都是骗人的╮( ̄▽ ̄)╭)

欧拉函数性质与求法 [数论][欧拉函数]

欧拉筛欧拉函数