1. 程式人生 > >nothasson

nothasson

數論基礎

歐幾里得演算法

gcd(a,b)=max[k]if(ka,kb)gcd(a,b) = max[k] \ \ \ if(k|a,k|b)

a和b的最大公因子是同時整除a和b的最大整數,其中g(0,0) = 0

互素

如果兩個數a.b互素,當且僅當它們只有一個正整數公因子為1,也就是說若g(a, b) = 1,那麼ab互素(互質).

模運算公式:

有:

[(amodn)+/(bmodn)]=(a+/b)modn[(a \ mod \ n) \ +-*/ \ (b \ mod \ n)] = (a\ +-*/ \ b)\ mod \ n

例子

117mod1311^7 \ mod\ 13

112=1214(mod13)11^2 = 121 \equiv 4(mod\ 13)

114=(112)2=423(mod13)11^4 = (11^2)^2 = 4^2 \equiv 3(mod 13)

117=1111211411431232(mod13)11^7 = 11*11^2*11^4 \equiv 11*4*3 \equiv 123 \equiv 2(mod\ 13)

素數

300=223152300 = 2^2*3^1*5^2

18=213218 = 2^1*3^2

gcd(18,300)=6=213150gcd(18,300) = 6 = 2^1*3^1*5^0

ifk=gcd(a,b)\therefore if\ k = gcd(a,b)

thenkp=min(ap,bp),pPthen\ k_p = min(a_p,b_p) \ , \ \forall \ p \in P

min(ap,bp),pP

裴蜀定理

假設我們有一個關於 x 和 y 的線性方程 ax+by=d ax+by=d 現在要求判斷這個方程是否存在整數解。

裴蜀定理告訴了我們,ax+by=d 存在整數解當且僅當 gcd(a,b)∣d。例如說 3x+6y=2 就不存在整數解,3x+6y=3 就存在整數解 x=1,y=0。

顯然 gcd(a,b)∣(ax+by),如果存在整數解的話必然有 gcd(a,b)∣d,也就是說,如果 gcd(a,b)∤d 這個線性方程就肯定不存在整數解。

費馬定理和尤拉定理

費馬定理

若p是素數,a是正整數且不能被p整除,則

ap11(modp) a^{p-1} \equiv 1(mod \ p)

第一種形式需要ap互質,第二種不需要 apamodp a^p \equiv a \ mod \ p

尤拉函式

ϕ(x) \phi(x) 即為尤拉函式的符號,表示小於x且與x互質的數有多少個。 顯然對於素數有 ϕ(n)=n1 \phi(n) = n-1 假設有兩個素數p,q。 n=pq \forall n=pq ϕ(n)=ϕ(pq)=ϕ(p)ϕ(q)=(p1)(q1) \phi(n) = \phi(pq) = \phi(p)*\phi(q) = (p-1)(q-1)

尤拉定理

尤拉定理說明,對於任意互素的a和n,有 aϕ(n)1(modn) a^{\phi(n)} \equiv 1(mod \ n) 而第二種表現形式不需要a、n互素 aϕ(n)+1a(modn) a^{\phi(n)+1} \equiv a(mod \ n)

中國剩餘定理

如果m1,m2,···,m3互質,由中國剩餘定理可得

{xa1(modm1)xa2(modm2)xa3(modm3)xak(modmk) \begin{cases} x \equiv a_1(mod \ m_1)\\ x \equiv a_2(mod \ m_2)\\ x \equiv a_3(mod \ m_3)\\ \ \ \ \ \ \ \ ·\\ \ \ \ \ \ \ \ ·\\ \ \ \ \ \ \ \ ·\\ x \equiv a_k(mod \ m_k) \end{cases} \downarrow xx0(modlcm(m1,m2,,mn)) x \equiv x_0(mod \ lcm(m_1,m_2,···,m_n)) 證明如下

先考慮只有兩個方程,並且模數互質的時候 {xa1(modp1)xa2(modp2) \begin{cases} x \equiv a_1(mod \ p_1) \\ x \equiv a_2(mod \ p_2) \\ \end{cases} \downarrow {x=a1+k1p1x=a2+k2p2 \begin{cases} x=a_1+k_1p_1 \\ x=a_2+k_2p_2 \\ \end{cases} \downarrow a1+k1p1=a2+k2p2 a_1 + k_1*p_1 =a_2+k_2*p_2 x=a1+k1p1 \therefore x=a_1+k_1p_1 =a1+p1p2t+k1 =a_1+p_1p_2t+k_1' =x0+p1p2t =x_0+p_1p_2t \downarrow xx0(modp1p2) x \equiv x_0(mod \ p_1p_2) 一直迭代後,則有: xx0(modp1p2p3p4pn)