欧拉函数

作者: dachengquan | 来源:发表于2020-08-04 18:16 被阅读0次

欧拉函数

定义:\forall a,b \in \mathbb{N},gcd(a,b) =1,则称a,b互质。gcd(a,b,c)称为a,b,c互质,而gcd(a,b)=gcd(b,c)=gcd(a,c)=1称为两两互质。例如2,3,4互质但是不是两两互质。
欧拉函数
1~N中与N互质的数的个数被称为欧拉函数,记为\varphi(N)
欧拉函数的计算方法是对N分解N = p_1^{c_1}p_2^{c_2}...p_m^{c_m}
\varphi(N) = N * \frac{p_1 - 1}{p_1}* \frac{p_2 - 1}{p_2}* ...*\frac{p_m - 1}{p_m}
对N个数,排除以p为质因子的数,得到的就是欧拉函数。

int varphi(int n){
    int ans=n;
    for(int i=2;i<=n/i;i++){
        if(n%i==0){
            ans = ans/i*(i-1);
            while(n%i==0&&n!=0)n/=i;
        }
    }
    if(n>1)ans = ans/n*(n-1);
    return ans;
}

欧拉函数的性质

性质1:\forall n>1,1~n中与n互质的数的和为n*\varphi(n)/2
性质2:若a,b互质,则\varphi(ab) = \varphi(a)*\varphi(b)
证明性质1:gcd(n,x) = gcd(n,n-x),所以与n互质的数是成对出现的分别为x和n-x平均值是\frac n 2一共有\varphi(n)个。
证明性质2:根据求欧拉函数的公式,直接带入等式。等式左右两边相等。
下面这个定义是积性函数的定义。
定义:如果当a,b互质时,有f(ab) = f(a)*f(b),那么称函数f为积性函数。
性质3欧拉函数满足,积性函数也满足。
性质3:若f是积性函数,且在算数基本定理中,n = \prod_{i=1}^mp_i^{c_1}f(n) = \prod_{i=1}^m f(p_i^{c_1})
性质4:设p为质数,若p|np^2|n\varphi(n) = p*\varphi(n/p)
性质5:设p为质数,若p|np^2\nmid n\varphi(n) = (p-1)*\varphi(n/p)
性质6:\sum\nolimits_{d\mid n}\varphi(d) = n
证明:首先看性质3直接代入求欧拉函数的公式即可,等式两边相等。
性质4,n/p包含质数p,n与n/p的质因数集合相同。求欧拉函数的公式中,只有N不同。从而可以推出关系。
性质5,n/p不包含质数p,n包含质数p。求欧拉函数的公式中,N不同,并且n/p比n少乘了一个\frac{p-1}{p}
性质6:首先证明\sum\nolimits_{d\mid n}\varphi(d) = n是积性函数。gcd(n,m)=1令f代表这个公式。
f(nm) = \sum\nolimits_{d\mid nm}\varphi(d) = \sum\nolimits_{d\mid n}\varphi(d) * \sum\nolimits_{d\mid m}\varphi(d)=f(n)*f(m)
n与m互质,证明了f是积性函数。对于单个因此p^m来说,f(p^m) = \varphi(1)+\varphi(p)+\varphi(p^2)+...+\varphi(p^m) = p^m
因此对于整个n分解为几个p_i^{c_i}然后使用积性函数性质求出f(n)。

利用埃筛计算欧拉函数的公式

埃筛会将每个合数被他不同的质因数筛一次。例如12被2和3筛。而欧拉函数需要被每个不同质因数p,\frac{p-1}{p}乘一次。修改代码的筛法,从标记合数,变为对欧拉函数执行乘法。
有更好用的线筛,埃筛一般用不到。

利用线筛计算欧拉函数

线筛每个数只会被他的最小质因数筛一次。考虑i如果p\nmid i说明p不是i最小的质因数,根据性质5 phi[i*p] = phi[i]*(p-1)。如果p\mid i说明p是i最小的质因数,phi[i*p]=phi[i]*p

bool v[100010];
int phi[100010];
vector<int> a;
void euler(int n){
    phi[1]=1;
    for(int i = 2;i<=n;i++){
        if(v[i]==0)a.push_back(i),phi[i]=i-1;
        for(int j = 0;i*a[j]<=n;j++){
            phi[i*a[j]] = phi[i]*(a[j]-1);
            v[i*a[j]]=1;
            if(i%a[j]==0){
                phi[i*a[j]] = phi[i]*a[j];
                break;
            }
        }
    }
}

总结

求欧拉函数可以使用试除法O(\sqrt N)求出N的每个质因数,顺便求出N的欧拉函数值。
使用线筛O(N)的时间求出1~N欧拉函数的值。

相关文章

  • 欧拉函数

    欧拉函数介绍 欧拉函数是小于x的整数中与x互质的数的个数,一般用φ(x)表示。特殊的,φ(1)=1。 求欧拉函数

  • 数论四大定理之欧拉定理

    本文分为两个部分,第一部分介绍欧拉定理的证明,第二部分介绍欧拉函数的求法。 欧拉函数 欧拉函数是小于等于 n 的正...

  • 关于RSA的学习整理

    一、RSA原始模型整理 1. 基础理论:欧拉函数与欧拉定理 欧拉函数:,表示[1,n)中与n互素的数的个数。显然若...

  • 欧拉函数

    欧拉函数:euler(n)为小于n的数中与n互质的数的个数; 根据需要分为:单数查询,范围查询 我们可以发现,单数...

  • 欧拉函数

    欧拉函数 定义:若则称a,b互质。gcd(a,b,c)称为a,b,c互质,而称为两两互质。例如2,3,4互质但是不...

  • 欧拉定理

    欧拉函数欧拉函数是小于等于 的正整数中与 互质的数的个数。 欧拉定理对于任意互素的 和 ,有参考链接费马小定理...

  • 欧拉函数(Euler Function)

    欧拉函数 在数论,对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目(φ(1)=1)。此函数以其首名研究者欧...

  • 数论 欧拉函数

    欧拉函数在解题的作用在于求一个数的质因子的个数,例如φ(24)=8,因为1, 5, 7, 11, 13, 17, ...

  • 欧拉函数 学习

    任意给定正整数n,请问在小于等于n的正整数之中,有多少个与n构成互质关系?(比如,在1到8之中,有多少个数与8构成...

  • 欧拉函数 || 降幂

    https://zybuluo.com/Junlier/note/1300214https://kvxi.org/...

网友评论

    本文标题:欧拉函数

    本文链接:https://www.haomeiwen.com/subject/mltsrktx.html