欧拉函数

来源:互联网 发布:软件培训机构排行榜 编辑:程序博客网 时间:2024/05/19 23:11

对正整数n,欧拉函数是小于n的数中与n互质的数的数目

欧拉函数与组合数学中的计数原理和容斥原理有着密切的联系。

Euler函数表达通式:


其中 为x的所有素因子,x是不为0的整数。

euler(1)=1(唯一和1互质的数就是1本身)。

欧拉定理:对于互质的正整数a和n,有 (可用于求解逆元)

若m,n互质, ——积性函数的性质

同时,欧拉函数也能这样计算:   其中是一个素数.

因为除了的倍数其他数字均和互质。而的倍数有个,所以



当初学习欧拉函数时我隐隐觉得它和容斥原理有什么联系,现在明白了,计数原理能解释欧拉函数。

欧拉函数的等式:


由算术基本定理(正整数的唯一分解定理):

那么,在1——n内和n互质的数这样求解:先除减去能被一个素因子整除的数:


发现多减了,再加上两个素因子乘积计算结果:

再减去三个素因子的乘积计算结果:

......

整理得到:

它也就是:


实现代码:
由表达式得到:
int Euler(int n){    int ans=n,a=n;    for(int i=2;i*i<=a;i++){        if(a%i==0){            ans=ans/i*(i-1);            while(a%i==0){                a/=i;            }        }    }    if(a>1) ans=ans/a*(a-1);    return ans;}

递推(筛法)求欧拉函数:
void Euler(int Max){    for(int i=1;i<Max;i++)  phi[i]=i;    for(int i=2;i<Max;i++) {        if(phi[i]==i){            for(int j=i;j<Max;j+=i){                phi[j]=phi[j]/i*(i-1);            }        }    }}



0 0