欧拉函数和欧拉定理

1. 欧拉函数的定义以及性质

定义一个数 m 的欧拉函数 φ(m)[1,m] 中与 m 互质的整数个数。

首先,明显地,

  1. 如果 m 是质数,那么 φ(m)=m1
  2. 如果 m 是质数,那么 φ(mk)=(m1)×mk1。这是因为由于 mk 只含有质因数 m,所以 [1,mk] 里所有不与 mk 互质的数只有所有 m 的倍数,一共 mk1 个数,所以 [1,mk] 中与 mk 互质的数有 (m1)×mk1 个。

定理 1 欧拉函数 φ 是一个积性函数。也就是如果 gcd(a,b)=1,那么 φ(a×b)=φ(a)×φ(b)

接下来我们要证明这件事。首先,我们知道,要与 a×b 互质,就要同时与 ab 互质。

引理 1 我们列出 [1,a] 的所有与 a 互质的数:c1,c2,,cφ(a)。那我们知道在 [1,a×b] 里有且仅有 c1,c2,,cφ(a),c1+a,c2+a,,cφ(a)+a,c1+2a,,ci+ja,cφ(a)+(b1)ab×φ(a) 个数与 a 互质。

证明

定理 1 的推论:如果 m 不含质因数 p,那么 gcd(m,pk)=1,所以 φ(m×pk)=φ(m)×φ(pk)=φ(m)×(p1)×pk1=φ(m)×pk×p1p

进一步可以得到:假设 m=p1α1p2α2prαr,那么 φ(m)=p1α11p2α21prαr1

定理 2 对任意正整数 mdmφ(d)=m
证明:当 m=1 时结论显然成立。当 m>1 时,假设 m=p1α1p2α2prαr,那么

(1)dmφ(d)=e1=0α1er=0αrφ(p1e1prer)(2)=i=1r(ei=0αiφ(piei))(3)=i=1r(1+j=1αiφ(pij))(4)=i=1r(1+j=1αi(pijpij1))(5)=i=1rpiαi(6)=m

证毕

2. 欧拉函数求值方法

  1. 单独求值:我们可以得到任意正整数欧拉函数求值的方法:将 m 质因数分解,假设 m=p1α1×p2α2××prαr,其中 pi 是质数。那么它的欧拉函数 φ(m) 的值就是 m×i=1rpi1pi。时间复杂度 O(m)

  2. 如果我们要求 φ(1),φ(2),,φ(m) 呢?我们可以利用欧拉函数是积性函数的性质,使用欧拉筛求解。时间复杂度 O(m)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll _=1000010;
ll c=0,p[_],e[_];
bitset<_>v;
int main(){
	v.set();
	for(ll i=2;i<_;i++){
		if(v[i])p[++c]=i,e[i]=i-1;//i是质数,那么phi(i)=i-1
		for(ll j=1;j<=c&&i*p[j]<_;j++){//正经筛法
			v[i*p[j]]=0;
			if(i%p[j])e[i*p[j]]=e[i]*(p[j]-1);//如果i*p[j]只有一个p[j],那要乘(p[j]-1)
			else{e[i*p[j]]=e[i]*p[j];break;}//如果i*p[j]有多于一个p[j],那对于多出来的每个p[j],要乘p[j]
		}
	}
	cout<<e[1000]<<'\n';//输出你需要的数
	return 0;
} 

4. 欧拉定理

定理 3(欧拉定理、费马小定理) gcd(a,m)=1aφ(m)1(modm)。特别地,当 m 是素数 p 时,ap11(modp)

证明:假设 {r1,r2,,rφ(n)} 是一个 modm 的既约剩余系,那么使用类似引理 2 的证法,{ar1,ar2,,arφ(n)} 也是一个 modn 的既约剩余系。所以 r1×r2××rφ(n)ar1×ar2××arφ(n)(modn)。因为 gcd(r1×r2××rφ(n),n)=1,所以 aφ(n)1(modn)
证毕

定理 4(扩展欧拉定理)

ab{aφ(m)(modm),gcd(a,m)=1ab(modm),gcd(a,m)1,bφ(m)a(bmodφ(m))+φ(m)(modm),gcd(a,m)1,b>φ(m)

证明:

主要证最后一式。我们假设 gcd(a,m)1,那么对于 a0a 次方,由于鸽巢原理,xN,ax 在模 m 的其中一个同余类中至少出现了 次。那么,由于每次乘 am 后的值是固定的,所以每两次出现之间所发生的事都是一样的。
所以我们可以假设,在 a0a 的序列中,存在 rs,使得前 r 个数 a0modm,ar1modm 互不相同,并且从 r 开始,每 s 个数就循环一次。同时,容易知道 ir,aiai+s(modm)

情况 1 a 为素数的情况,该式成立。

由于 gcd(a,m)1,所以 am。那么,存在 wm 使得 m=aw×m,并且 gcd(aw,m)=1。所以,我们知道 aφ(m)1(modm),并且 φ(m)φ(m)
那么 aφ(m)1(modm),即 aφ(m)=km+1,两边同乘 aw,那么 aw+φ(m)=km+aw,所以 aw+φ(m)aw(modm)
所以我们可以推知 b>w 时有 aba((bw)modφ(m))+w(modm)
又因为 φ(m)>w,所以有 awaw+φ(m)a(wmodφ(m))+φ(m)(modm),那么

(7)aba((bw)modφ(m))+w(modm)(8)a((bw)modφ(m))+(wmodφ(m))+φ(m)(modm)(9)a(bmodφ(m))+φ(m)(modm)

证毕

情况 2 a 是素数的幂的情况,该式成立。

暂定

情况 3 a 是合数的情况,该式成立。

暂定

posted @   lrxQwQ  阅读(112)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示