积性函数系列(一):欧拉函数

转载 2015年11月21日 15:33:02

http://zhengyidong.me/2014/11/积性函数系列(一):欧拉函数/


积性函数系列(一):欧拉函数

NOVEMBER 14, 2014 AT 1:23 AM

本系列是数论篇章的第一篇(于是又挖了一个数论的坑orz),主要介绍、证明初等数论中一些重要的概念、结论。
在微积分学领域,积性函数指的是具有f(ab)=f(a)f(b)的函数,在数论领域这个概念略有不同,仅定义在正整数上,它揭示了整数的很多性质。废话不多说,直奔主题。

为了区分通常意义上的函数,我们定义算数函数:

定义1.1 定义在所有正整数上的函数称为算数函数。
在整个积性函数篇里,不加说明地,我们总是讨论算数函数。

定义1.2 算术函数f如果满足对于任意两个互质的正整数mn,均有f(mn)=f(m)f(n),就称f为积性函数(或乘性函数)。如果对于任意两个正整数mn,均有f(mn)=f(m)f(n),就称为完全积性函数。

很容易找到一些trivial的积性函数,如f(n)=1,f(n)=n,f(n)=n2,事实上所有的幂函数都是积性函数。

结合积性函数的定义和算数基本定理,很容易得到下面的定理:

定理1.1 如果f是一个积性函数,对于任意的正整数n有素数幂分解n=p1a1p2a2...psas,那么有f(n)=f(p1a1)f(p2a2)...f(psas)
证明:略,使用数学归纳法即可。

好了,介绍完了积性函数的基本概念,就开始介绍今天的主角,欧拉函数,它也被称为欧拉ϕ函数。顾名思义,它是由欧拉首先研究的。

定义1.3 欧拉函数ϕ(n)定义为不超过n且和n互质的正整数的个数。

下面我们就来探讨欧拉函数在各个点上的取值。很容易得到对于素数pϕ(p)=p1,那么反过来是不是也成立呢?

定理1.2 如果p是素数,那么ϕ(p)=p1.反之,如果p是正整数且满足ϕ(p)=p1,那么p是一个素数。
证明:前句可由互质定义得到,我们只证明后句。若p不是素数,那么或是1或是合数。而ϕ(1)=1,但若p是合数,得有因子0<d<p,而p不与自身互质,这使得和p互质的数至多只有p2个,所以也不可能,故p是素数。

我们再进一步,看欧拉函数在素数的幂下的取值。实际上和素数幂pn不互质的只有p的倍数,一共有pn/p=pn1个,故ϕ(pn)=pnpn1

定理1.3 如果p是素数,那么ϕ(pn)=pnpn1

接下来我们讨论更一般的情况,为此,我们需要证明欧拉函数是一个积性函数。定理的证明依赖于同余的一些简单性质,由于本文是本系列的第一篇,所以这里尽量把需要用到的性质先给证一证。如果你对这些性质比较清楚,可以直接跳过下面的补充部分,直接进入定理的证明。

定义1.4 一个模m完全剩余系是一个整数的集合,使得任意整数恰和此集合中的一个元素模m同余。

引理1.4 m个模m不同余的整数的集合构成一个模m的完全剩余系。
证明: 假设m个模m不同余的整数的集合不是一个模m的完全剩余系。那么可能存在整数a,使得集合中存在不止一个元素和a同余,但由于同余的性质,如果abm同余,且acm同余,那么必有bcm同余,和假设不符;那么可能存在整数a,使得集合中不存在元素和a同余,但模m的余数只有m种可能,a否定了一种可能,意味着集合里的元素模m至多只有m1个值,但集合中的m个元素互不同余,应有m个不同的值,和假设不符。故原假设成立。

由上述引理,容易得到0,1,2,3,...,m1是模m的一个完全剩余系。

引理1.5 若r1,r2,...,rm是模m的一个完全剩余系,且正整数a满足gcd(a,m)=1,则对任意整数b,ar1+b,ar2+b,...,arm+b都是模m的完全剩余系。
证明:由引理1.4,我们只需证明这m个数互不同余。取任意两个元素ri,rj,ij相减,得ari+b(arj+b)=a(rirj).
若我们有ariarj(mod m), 基于同余的性质,在gcd(a,m)=1的情况下,两边可以约去a,于是得到rirj(mod m),这和假设矛盾,故ari,arj 不同余,故引理成立。

有了引理1.5后,我们就可以比较方便地证明定理1.6。

定理1.6 设m,n是两个互质的正整数,那么ϕ(mn)=ϕ(m)ϕ(n).
证明:我们将1,2,...,mn从上往下,从左往右依次排列,每一列写m个数:
1  m+1 2m+1 ... (n1)m+1
2  m+2 2m+2 ... (n1)m+2
...
r  m+r 2m+r ... (n1)m+r
...
m  2m  3m     ...  nm
从行的角度观察上式,考察第r行,由于mm不互质,所以如果r不和m互质的话,整行都不与mn互质,所以实际上我们只需考虑ϕ(m)行。而对于这些rm互质的行,每一行实际上构成模n的完全剩余系,我们研究某行,为了方便,同样记为r。取第k个元素,即(k1)m+r,记(k1)m+r mod m=d.
如果d和m互质,那么有(k1)m+rd=λm可知,(k1)m+rm也互质,否则存在的因子必是d的因子(同除以该因子,两边应均为整数);反之,如果dm不互质,(k1)m+rm也不互质,dm的公因子也是它们的公因子。于是每一行都有ϕ(n)个因子。定理得证。

结合定理1.3和定理1.6,以及算数基本定理,我们可以求得任意正整数的欧拉函数值。

定理1.7 设n=p1a1p2a2...pkak为正整数n的素数幂分解,那么ϕ(n)=n(11/p1)(11/p2)...(11/pk).
证明:由定理1.1和1.6可得,ϕ(n)=ϕ(p1a1)ϕ(p2a2)...ϕ(pkak).由定理1.3可得,ϕ(pkak)=pkpk1,于是有
ϕ(n)=p1a1p2a2...pkak(11/p1)(11/p2)...(11/pk)
=n(11/p1)(11/p2)...(11/pk)

至此我们已经掌握了欧拉函数的值得求法。你是否对这么多的证明感到厌烦了,在进一步讨论欧拉函数的性质之前,我们转换一下角度,从程序设计的角度入手,看看如何实现计算欧拉函数。如果你对程序设计不感兴趣,可以直接跳过这部分内容。计算单个欧拉函数值的过程实际上就是对正整数n进行分解的过程,我们从2开始从小到大寻找n的因子,显然找到的最小的因子必是素数(否则会有更小的素因子),找到后把这个素因子全部约去,并计算(11/p1),然后接着向前,由于之前的因子已经消去,我们仍能保证找到的因子是素数。完整的代码如下:

int euler(int x){
    int res = x;
    for(int i=2; i<(int)sqrt(x*1.0)+1; ++i)
        if(x % i == 0){
             res = res / i * (i - 1);
             while(x % i == 0) x /= i;
         }
    if(x > 1) res = res / x * (x - 1);
    return res;
}

下面给出求1..maxn的所有欧拉函数值的程序,也非常简单,这里不再解释了。

for(int i=1; i<=maxn; ++i) phi[i] = i;
for(int i=2; i<=maxn; i+=2) phi[i] /= 2;
for(int i=3; i<=maxn; i+=2)
    if(phi[i] == i){
        for(int j=i; j<=maxn; j+=i)
            phi[j] = phi[j] / i * (i - 1);
    }

短暂的休息之后接着回到欧拉函数的性质中来。下面的定理表明,除了n=1,2ϕ(n)都是偶数。

定理1.8 设n是一个大于2的正整数,那么ϕ(n)是偶数.
证明:由定理1.1和1.2可知,大于2的素数都是偶数,而所有高于1次的素数幂(包括2)都是偶数,而由定理1.7,所有大于2的合数的欧拉函数都可以分解成素数幂的乘积,所以也必定是偶数。

最后我们介绍一个非常重要的概念,和函数,它在后续的内容中也会发挥作用。

定义1.5 设f是一个算数函数,那么记F(n)=d|nf(d)代表fn中所有正因子处的值的和,则F称为f的和函数。

对于欧拉函数而言,它的和函数有很好的性质:

定理1.9 设n为一个正整数,那么d|nϕ(d)=n.
证明:我们1..n的整数按照与n的最大公约数划分成若干个不相交的类,最大公约数为d的类记为Cd。那么md当且仅当gcd(n,m)=d,或者说gcd(n/d,m/d)=1,由于1<=m<=nm/d可以取到1..n/d的所有数,于是符合条件的m的个数即为ϕ(n/d)。于是有
F(n)=d|nf(n/d),而n/d实际上取尽了n的所有因子,于是等价于d|nf(d),定理得证。

关于积性函数和欧拉函数的基础讨论就到这里了,本系列的下一节将介绍其它的积性函数以及有趣的梅森素数。

相关文章推荐

欧拉函数为什么是积性函数

以下全文转载:http://www.cnblogs.com/372465774y/archive/2012/10/16/2726282.html // 下面是百度上找的错误证明 函数的积性即:...

积性函数系列(一):欧拉函数

本系列是数论篇章的第一篇(于是又挖了一个数论的坑orz),主要介绍、证明初等数论中一些重要的概念、结论。 在微积分学领域,积性函数指的是具有f(ab)=f(a)f(b)f(ab)=f(a)f(b)的...

浅谈一类积性函数的前缀和

笔者在刷题过程中遇到一些求积性函数前缀和的问题,其中有一类问题需要在低于线性时间复杂度的算法,今天就来浅析一下这类问题的求解方法,当作以后讲课使用的讲义。若之后有了新的研究,再来继续完善这篇文章。本文...

积性函数

原文:http://blog.csdn.net/skywalkert/article/details/50500009 以下是本人整理~一些函数定义: 元函数e(n)=[n=1]e(n)=[n=1...

[HDU 5728] PowMod (欧拉函数的积性+欧拉公式降幂+欧拉筛)

HDU - 5728 求 K=∑i=1mϕ(i∗n)mod1000000007K = \displaystyle\sum_{i=1}^m {\phi(i*n)} mod 1000000007 ...

初等数论中求欧拉函数值程序

  • 2011年06月17日 15:18
  • 882KB
  • 下载

POJ 2048 Longge's problem (欧拉函数 积性函数)

POJ 2048 Longge's problem (欧拉函数 积性函数)

HDU 4002 Find the maximum (欧拉函数-积性函数的性质(2011年大连赛区网络赛第二题)

【题目链接】:click here~~ 【题目大意】: 给出一个整数n,求一个数x,x在1到n之间,并且x/φ(x)最大(其中φ(x)为x的欧拉函数)。 【思路】: 由欧拉函数为积性函数,即:如果 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:积性函数系列(一):欧拉函数
举报原因:
原因补充:

(最多只允许输入30个字)