歐拉函數,歐拉定理(費馬小定理),擴展歐拉定理的證明和應用——楊子曰數學

歐拉函數,歐拉定理(費馬小定理),擴展歐拉定理的證明和應用——楊子曰數學

超鏈接:數學合集


瞎BB:破紀錄,最長的博客名!(英文題目除外)


先做個預告:
在文章的最後我們要解決一個灰常玄學的問題:求aaaamod paa^{a^{a^{a^{·^{·^{·}}}}}} mod \ p(無窮多個a)


一、歐拉函數

1.它是啥

φ(n)\varphi(n):就是小於等於n的數中與n互質的數的個數

2.性質一:歐拉函數是積性的

就是φ(nm)=φ(n)φ(m)\varphi(n*m)=\varphi(n)*\varphi(m) (條件:m,n互質)
爲什麼捏?
我們不妨假設小於m的數中於m互質的數爲:x1,x2,x3...xφ(m)x_1,x_2,x_3...x_{\varphi(m)},我們給它取個名字叫做m的簡化剩餘系
我們不妨假設小於n的數中於n互質的數爲:y1,y2,y3...yφ(n)y_1,y_2,y_3...y_{\varphi(n)},我們給它取個名字叫做n的簡化剩餘系

你會發現我們如果能證明好下面三個事情就得證了:

  1. gcd(xin+yjm,mn)=1gcd(x_i*n+y_j*m,mn)=1,也就是這小於mnmn的數中與mnmn互質的數可以從m的簡化剩餘系裏選一個n的簡化剩餘系選一個用(xin+yjm)mod mn(x_i*n+y_j*m)mod\ mn算出來,我們要φ(nm)\varphi(n*m)個數,有φ(n)φ(m)\varphi(n)*\varphi(m)種選法
  2. 這樣選出來的φ(n)φ(m)\varphi(n)*\varphi(m)個數沒有重複
  3. 這樣選出來的φ(n)φ(m)\varphi(n)*\varphi(m)個數沒有少

一個一個慢慢來:

gcd(xin+yjm,mn)=1gcd(x_i*n+y_j*m,mn)=1

首先我們從gcd(xi,m)=1gcd(x_i,m)=1開始
n和m互質,So,我們給x乘一個n等式依然成立
gcd(xin,m)=1gcd(x_i*n,m)=1
然後我們在給xinx_i*n加上一個m的倍數yjmy_j*m,等式依然成立
gcd(xin+yjm,m)=1gcd(x_i*n+y_j*m,m)=1 \cdots①
同理(對稱一下),我們也可以得到:
gcd(yjm+xin,n)=1gcd(y_j*m+x_i*n,n)=1 \cdots②
①和②放在一起看,你會發現:xin+yjmx_i*n+y_j*m又和m互質,又和n互質,那麼和mn也一定互質:
gcd(xin+yjm,mn)=1gcd(x_i*n+y_j*m,mn)=1
得證

②這樣選出來的φ(n)φ(m)\varphi(n)*\varphi(m)個數沒有重複

也就是任意的xin+yjmx_i*n+y_j*m模mn都不同餘
那麼我們能不能這樣來:如果我們能通過:xin+yjmxpn+yqm(mod mn)x_i*n+y_j*m \equiv x_p*n+y_q*m (mod\ mn)推出i=p,j=ki=p,j=k的話這個部分就得證了

那我們就來試試看唄:
xin+yjmxpn+yqm(mod mn)x_i*n+y_j*m \equiv x_p*n+y_q*m (mod\ mn)
模mn下同餘,那麼在模m下也同餘
xin+yjmxpn+yqm(mod m)x_i*n+y_j*m \equiv x_p*n+y_q*m (mod\ m)
yjmy_j*myqmy_q*m都是m的倍數,模m都是0,So,扔掉也無所謂:
xinxpn(mod m)x_i*n\equiv x_p*n(mod\ m)
同餘號兩邊同時除掉一個n:
xixp(mod m)x_i\equiv x_p(mod\ m)
m的簡化剩餘系中的數都互不相等
哦,那不就是i=p了嗎!
同理j=q,得證!

③這樣選出來的φ(n)φ(m)\varphi(n)*\varphi(m)個數沒有少

設 z 是mn的簡化剩餘系的集合的任意某個元素,那麼我們現在就是要證明z一定能用xin+yjmx_i*n+y_j*m表示,黑喂狗:
我們都知道mx0+ny0=gcd(m,n)m*x_0+n*y_0=gcd(m,n)一定有關於x0,y0x_0,y_0的整數解
(有人問爲什麼嗎?貝祖定理←自己瞧)
然後我們還知道:gcd(m,n)=1gcd(m,n)=1,So,一定存在整數x0,y0x_0,y_0使得mx0+ny0=1m*x_0+n*y_0=1 ,然後同時乘個z,於是我們得到了:
mx0z+ny0z=zm*x_0*z+n*y_0*z=z
也就是一定存在整數x,y,滿足:mx+ny=zm*x+n*y=z

然後我們把gcd(z,mn)=1gcd(z,mn)=1裏的z帶掉,得到了:
gcd(mx+ny,mn)=1gcd(m*x+n*y,mn)=1
那麼下面這個也一定成立:
gcd(mx+ny,m)=1gcd(m*x+n*y,m)=1
mxm*x是m的倍數,So,mxm*x對這兩個東西的互質毫無貢獻,於是乎我們又得到了:
gcd(ny,m)=1gcd(n*y,m)=1
有沒有發現n和m是互質的,然後我們就美滋滋地得到了:
gcd(y,m)=1gcd(y,m)=1
然後咱們再用一下歐幾里得算法(戳我):
gcd(m,y mod m)=1gcd(m,y \ mod\ m)=1
也就是說y mod my \ mod\ m是一個小於m且和m互質的數,有沒有發現它一定在m的簡化剩餘系的簡化剩餘系裏(←它的定義就是這樣的呀)
然後我們就開心地得到了:
yxi(mod m)y\equiv x_i(mod\ m)
我們再把整個式子都乘個n,我們就有了:
nynxi(mod nm)n*y\equiv n*x_i(mod\ nm) \cdots①
同理,我們還有:
mxmyj(mod nm)m*x\equiv m*y_j(mod\ nm) \cdots②
最後把①②咔嚓一加:
mx+nynxi+myi(mod nm)m*x+n*y\equiv n*x_i+m*y_i(mod\ nm)
就是:
znxi+myi(mod nm)z\equiv n*x_i+m*y_i(mod\ nm)
完美得證!

至此我們終於得到了,歐拉函數的積性o( ̄▽ ̄)ブ


3.性質二:p是質數時:φ(pk)=(p1)pk1\varphi(p^k)=(p-1)*p^{k-1}

已知小於pkp^k的正整數的有pk1p^k-1個,其中和pkp^k不互質的正整數有p×1,p×2,...,p×(pk11)p×1,p×2,...,p×(p^{k-1}-1),共計pk11p^{k-1}-1

so, φ(pk)=pk1(pk11)=pkpk1=(p1)pk1\varphi(p^k)= p^k-1-(p^{k-1}-1)=p^k-p^{k-1}=(p-1)*p^{k-1}


4.怎麼求捏?

我們就來根據性質一和性質二來推導一下:

我們先分解一下質因數:
φ(n)=φ(p1k1p2k2p3k3psks)\varphi(n)=\varphi({p_1}^{k_1}*{p_2}^{k_2}*{p_3}^{k_3}* \cdots*{p_s}^{k_s})
然後再由它的積性,我們得到了:
φ(n)=φ(p1k1)φ(p2k2)φ(p3k3)φ(psks)\varphi(n)=\varphi({p_1}^{k_1})*\varphi({p_2}^{k_2})*\varphi({p_3}^{k_3})* \cdots*\varphi({p_s}^{k_s})
然後性質2搞一搞:
φ(n)=(p1k11p2k21p3k31psks1)(p11)(p21)(p31)(ps1)\varphi(n)=({p_1}^{k_1-1}*{p_2}^{k_2-1}*{p_3}^{k_3-1}*\cdots*{p_s}^{k_s-1})*(p_1-1)*(p_2-1)*(p_3-1)* \cdots*(p_s-1)
從右邊的每個小括號裏拿出一個pip_i乘到左邊的括號中,我們得到了:
φ(n)=(p1k1p2k2p3k3psks)(11p1)(11p2)(11p3)(11ps)\varphi(n)=({p_1}^{k_1}*{p_2}^{k_2}*{p_3}^{k_3}*\cdots*{p_s}^{k_s})*(1-\frac{1}{p_1})*(1-\frac{1}{p_2})*(1-\frac{1}{p_3})* \cdots*(1-\frac{1}{p_s})
也就是說,我們得到了φ(n)\varphi(n)的通項公式:
φ(n)=n(11p1)(11p2)(11p3)(11ps)\varphi(n)=n*(1-\frac{1}{p_1})*(1-\frac{1}{p_2})*(1-\frac{1}{p_3})* \cdots*(1-\frac{1}{p_s})

複雜度O(n)O(\sqrt{n})

求歐拉函數還有一種線性篩的做法(戳我
我們馬上進入歐拉定理


二、歐拉定理

1.它是啥?

先上個歐拉定理(條件是a和n互質):

aφ(n)1(mod n)a^{\varphi(n)} \equiv1(mod \ n)


2.它爲啥?

黑喂狗:
我們不妨假設小於n的數中於n互質的數爲:x1,x2,x3...xφ(n)x_1,x_2,x_3...x_{\varphi(n)},我們給它取個名字叫做集合X(這個X其實就是n的簡化剩餘系)

然後我們再分別令:
{m1=ax1m2=ax2m3=ax3mφ(n)=axφ(n) \left\{ \begin{aligned} m_1 & = a*x_1\\ m_2 & = a*x_2\\ m_3 & = a*x_3\\ \vdots\\ m_{\varphi(n)} & = a*x_{\varphi(n)}\\ \end{aligned} \right.
我們管這個m的序列叫集合M
有了集合X和集合M,我們就可以開始了

不過在開始前,我們先要證明兩件事情:

  1. M中任意兩個數都不模n同餘
  2. M中的數模n得到的數都與n互質

一個一個來:

①M中任意兩個數都不模n同餘

我們用反證法

假設集合M中有mim_imjm_j兩個數模n同餘
即:mimj(mod n)m_i \equiv m_j(mod \ n)
也就是:mimj0(mod n)m_i-m_j \equiv 0(mod \ n)
代入一下:axiaxj0(mod n)a*x_i-a*x_j\equiv 0(mod \ n)
a(xixj)0(mod n)a∗(x_i−x_j)\equiv 0(mod \ n)
我們都知道a和n互質(大條件),So:
xixj0(mod n)x_i−x_j\equiv 0(mod \ n)
我們都知道xix_ixjx_j都是小於n的不同數,所以xixjx_i−x_j一定大於0小於n,So上面那個式子怎麼可能成立

得證!

②M中的數模n得到的數都與n互質

這個比較easy

我們知道:mi=axim_i=a*x_i,這個式子裏a與n互質,xix_i與n互質,然後你就會發現mim_i也和n互質,然後歐幾里得算法搞一下:
gcd(mi,n)=gcd(n,mi mod n)=1gcd(m_i,n)=gcd(n,m_i\ mod\ n)=1
完美,得證!

然後咱們正式開始:

由我們在上面得到的第二條可以得到:mi mod nm_i \ mod\ n出來的一定是一個小於n而且和n互質的數,So,mi mod nm_i \ mod\ n這個數一定在集合X裏(集合X的定義就是這樣的呀!)

有根據第一條集合M中的每個mi mod nm_i \ mod\ n得到的數都不相同,So,你有沒有發現集合M中這每個mi mod nm_i \ mod\ n與集合X中的每個xix_i一 一對應相等

於是我們就得到了:
m1m2m3mφ(n)x1x2x3xφ(n)(mod n)m_1*m_2*m_3*\cdots*m_{\varphi(n)} \equiv x_1*x_2*x_3*\cdots*x_{\varphi(n)}(mod \ n)
代入一下:
ax1ax2ax3axφ(n)x1x2x3xφ(n)(mod n)a*x_1*a*x_2*a*x_3*\cdots*a*x_{\varphi(n)} \equiv x_1*x_2*x_3*\cdots*x_{\varphi(n)}(mod \ n)
aφ(n)(x1x2x3xφ(n))x1x2x3xφ(n)(mod n)a^{\varphi(n)}*(x_1*x_2*x_3*\cdots*x_{\varphi(n)})\equiv x_1*x_2*x_3*\cdots*x_{\varphi(n)}(mod \ n)
哦,移過去:
(aφ(n)1)(x1x2x3xφ(n))0(mod n)(a^{\varphi(n)}-1)*(x_1*x_2*x_3*\cdots*x_{\varphi(n)})\equiv 0(mod \ n)
美滋滋,集合X中的所有數都與n互質,於是乎:
aφ(n)10(mod n)a^{\varphi(n)}-1\equiv 0(mod \ n)
aφ(n)1(mod n)a^{\varphi(n)}\equiv 1(mod \ n)

得證


到這裏,你一定會問了——“這玩意什麼用捏?”
“沒用”
“…”
"BUT,我們把歐拉定理轉換一下就有用了"


3.它能幹啥?

主要可以做兩件事情:

  1. 轉換成費馬小定理後,進行素數檢測(就是給你一個數說出它是不是素數)
  2. 轉換成費馬小定理後求逆元(戳我
  3. 轉換成擴展歐拉定理以後,歐拉降冪abmod pa^b mod\ p(這不是快速冪搞搞不就好了,戳這裏就老實了)

咱們一件一件說:


4.費馬小定理

pap11(mod p)當p是質數時:a^{p-1} \equiv1(mod \ p)

這……
不就是歐拉定理的特殊情況嗎?
你可不要小看這個東西,他可以告訴你n是不是一個質數

“哦哦,我知道了,隨便找一個小於n的數a,然後代入到費馬小定理裏面,看看是不是同餘就可以了”

沒錯,就是這樣,但是有一個很尷尬的事情:p爲質數是費馬小定理的充分不必要條件!
也就是說,對於2<=a<p,素數p一定滿足費馬小定理
對於一個a,滿足費馬小定理的p可能是合數可能是素數
不滿足費馬小定理一定是合數

“哦,什麼垃圾算法,居然有概率是錯的”

那你多找幾個a不久好了,又要拼rp,美滋滋!

(一般還是不要用這個算法)

int check_prime(int n){
	if (n==1) return 0;
	if (n==2) return 1;
	for (int i=1;i<=20;i++){
		int tmp=rand()%(n-2)+2;
		if (pow(tmp,n-1,n)!=1) return 0;
	}
	return 1;
}

大家還可以去學習一種更加nb的素數檢驗方法——米勒拉賓素數測試


5.擴展歐拉定理

在講擴展歐拉定理之前,先試試這個:口算7555 mod 137^{555}\ mod\ 13

相信機智的大佬們一定有所想法,7和13互質φ(13)\varphi(13)=12,那我們就要湊7127^{12}
7555=71246+3=(712)46737^{555}=7^{12*46+3}=(7^{12})^{46}*7^3
於是乎,就可以使用歐拉定理了
(712)467314673(mod 13)(7^{12})^{46}*7^3\equiv1^{46}*7^3(mod\ 13)
那我們就只需要算一算73 mod 137^3\ mod\ 13就好了,得到答案5

於是有沒有發現我們似乎得到了一個定理:
abab mod φ(n)(mod n)a^b\equiv a^{b\ mod\ \varphi(n)}(mod\ n)
BUT,它只有在a和p互質的時才成立,沒啥卵用,我們能不能把它拓展到一般情況捏?
於是,我們得到了擴展歐拉定理:
abab mod φ(n)+φ(n)(mod n)a^b\equiv a^{b\ mod\ \varphi(n)+\varphi(n)}(mod\ n)

證明走起:

我們先把a分解一下質因數:a=p1r1p2r2p3r3psrsa={p_1}^{r_1}*{p_2}^{r_2}*{p_3}^{r_3}*\cdots*{p_s}^{r_s}

如果我們可以證明:對於裏面的每個質數pip_i,我們都能證明:
pibpib mod φ(n)+φ(n)(mod n){p_i}^b \equiv {p_i}^{b\ mod\ \varphi(n)+\varphi(n)}(mod\ n)
那麼也就是我們一定可以得到:
(piki)b(piki)b mod φ(n)+φ(n)(mod n)({p_i}^{k_i})^b \equiv ({p_i}^{k_i})^{b\ mod\ \varphi(n)+\varphi(n)}(mod\ n)
然後我們把每個(piki)b({p_i}^{k_i})^b乘起來,就得到了:
(p1r1p2r2p3r3psrs)b(p1r1p2r2p3r3psrs)b mod φ(n)+φ(n)(mod n)({p_1}^{r_1}*{p_2}^{r_2}*{p_3}^{r_3}*\cdots*{p_s}^{r_s})^b \equiv ({p_1}^{r_1}*{p_2}^{r_2}*{p_3}^{r_3}*\cdots*{p_s}^{r_s})^{b\ mod\ \varphi(n)+\varphi(n)}(mod\ n)
也就是我們要證明的:
abab mod φ(n)+φ(n)(mod n)a^b\equiv a^{b\ mod\ \varphi(n)+\varphi(n)}(mod\ n)

那現在我們就開始證明:pbpb mod φ(n)+φ(n)(mod n)pp^b \equiv p^{b\ mod\ \varphi(n)+\varphi(n)}(mod\ n)(p是一個質數)

p是一個質數,So,如果n不是p的倍數,那麼n和p一定互質,顯然成立,就是我們上面自己推出來的那個式子右邊多乘了一個pφ(n)p^{\varphi(n)}

pφ(n) mod n=1()p^{\varphi(n)} \ mod \ n=1(歐拉定理),So,等式當然成立

那麼我們現在就來考慮n是p的倍數的情況:

假設:n=pksn=p^k*s(s和p互質)
由於s和p的互質,我們就可以歐拉定理了:
pφ(s)1(mod s)p^{\varphi(s)} \equiv1(mod \ s)
這個式子也顯然成立:
(pφ(s))φ(pk)1(mod s)(p^{\varphi(s)})^{\varphi(p^k)} \equiv1(mod \ s)
上面已經說過了,歐拉函數是積性函數,又因爲pkp^k和s互質,So:
φ(n)=φ(pk)φ(s)\varphi(n)=\varphi(p^k)*\varphi(s)
於是我們就得到了:
pφ(n)1(mod s)p^{\varphi(n)} \equiv1(mod \ s)\cdots①(這個式子下面還要用)
又因爲:
pb=(pφ(n))b/φ(n)pb mod φ(n)p^b=(p^{\varphi(n)})^{\lfloor b/\varphi(n)\rfloor}*p^{b\ mod\ \varphi(n)}
還因爲:
(pφ(n))b/φ(n) mod s=1(p^{\varphi(n)})^{\lfloor b/\varphi(n)\rfloor}\ mod\ s=1(看①式)
我們得到了:
pbpb mod φ(n)(mod s)p^b\equiv p^{b\ mod\ \varphi(n)}(mod\ s)
我們再把整個式子乘pkp^k,得到:
pb+kpb mod φ(n)+k(mod spk)p^{b+k}\equiv p^{b\ mod\ \varphi(n)+k}(mod\ s*p^k)
pb+kpb mod φ(n)+k(mod n)p^{b+k}\equiv p^{b\ mod\ \varphi(n)+k}(mod\ n)

如果,我們把左右兩邊同時乘pφ(n)kp^{\varphi(n)-k},你就會驚悚地發現:
pb+φ(n)pb mod φ(n)+φ(n)(mod n)p^{b+\varphi(n)}\equiv p^{b\ mod\ \varphi(n)+\varphi(n)}(mod\ n)\cdots②
已經非常接近答案了,我們在把①乘pkp^k,得到了:
pφ(n)+kpk(mod pks)p^{\varphi(n)+k} \equiv p^k(mod \ p^k*s)
pφ(n)+kpk(mod n)p^{\varphi(n)+k} \equiv p^k(mod\ n)\cdots③
然後我們有這樣的等式:
pbpbkpk(mod n)p^b\equiv p^{b-k}*p^k(mod\ n)
然後根據③把pkp^kpφ(n)+kp^{\varphi(n)+k}帶掉,我們有了:
pbpb+φ(n)(mod n)p^b\equiv p^{b+\varphi(n)}(mod\ n)
最後把這個式子帶回②的左邊:
pbpb mod φ(n)+φ(n)(mod n)p^b \equiv p^{b\ mod\ \varphi(n)+\varphi(n)}(mod\ n)
哦,我們得證了!


接下來我來解答文章開頭的那個問題:
aaaamod pa求a^{a^{a^{a^{·^{·^{·}}}}}} mod \ p(無窮多個a)
我們不妨令x=aaaax=a^{a^{a^{a^{·^{·^{·}}}}}}
那麼我們現在就是要求x mod px\ mod\ p
然後你會發現x這個數有一個很神奇但很好理解的性質:x=axx=a^x
So,我們現在要求:ax mod pa^x\ mod\ p
哦,有沒有發現可以用拓展歐拉定理了!
於是我們得到了:
axax mod φ(p)+φ(p)(mod p)a^x\equiv a^{x\ mod\ \varphi(p)+\varphi(p)}(mod\ p)
然後問題就轉化爲求等式右邊那個東西,想要求出這個東西,就是要求出——x mod φ(p)x\ mod\ \varphi(p)

哦,有沒有發現問題變回了開始的樣子,只不過p變成了φ(p)\varphi(p),我們在繼續試試:

這時x依然等於axa^x

根據歐拉定理:
axax mod φ(φ(p))+φ(φ(p))(mod φ(p))a^x\equiv a^{x\ mod\ \varphi(\varphi(p))+\varphi(\varphi(p))}(mod\ \varphi(p))
此時,我們就要求的就是x mod φ(φ(p))x\ mod\ \varphi(\varphi(p))
p不停地變φ(p)\varphi(p),顯然是不斷減小的
顯然這是一個遞歸的過程,那麼到什麼時候結束捏?
——當p=1的時候,顯然所有的數模1都是0,然後再回溯上去

OK,完事
如果想要嘗試這道題,你可以戳我(略有區別,它的a永遠等於2)


參考:
https://www.cnblogs.com/wangxiaodai/p/9758242.html
https://blog.csdn.net/qq9764312/article/details/79616041
https://zhuanlan.zhihu.com/p/31510871
https://blog.csdn.net/hzj1054689699/article/details/80693756
https://blog.csdn.net/summonlight/article/details/51967425
https://www.cnblogs.com/handsomecui/p/4755455.html

於HG機房&TJQ高層小區

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章