[數論] 進階質數與模運算

[2021 Jul 29] 初稿
[2021 Aug 17] 我發現 Miller-Rabin 質數測試部分是爛掉的,之後會把這部分重寫,請先不要參考
[2025 Feb 10] 拿掉質數跟原根,以及重新修整一些敘述。這兩個主題有機會的話會(大概不是在這裡)補上。

質數

待補。

除法

Newton–Raphson 除法

與直式除法不同的是,Newton–Raphson 除法的目的是在除法的式子中:

N/D=Q

如果能找到 D 的乘法反元素(即倒數), 就可以用乘法的方式去做除法。

所以如果能找到一個方程式 f(x)x=1/D 是其中的一根,就可以用牛頓法去求解, 先觀察一下牛頓法的迭代過程:

xi+1=xif(xi)f(xi)

最好想到的方程式是f(x)=Dx1,然而微分過後會出現 f(x)=D, 分母有出現 D,然而我們還沒計算出 D 的反元素,這個方程式是不可行的, 所以我們把原式 x=1/D 換成D=1/x, 就有 f(x)=1/xD,微分過後會出現 f(x)=1/x2, 此時代入牛頓法的公式,會得到:

xi+1=xi1xiD1xi2=xixiDxi21=xi+xiDxi2=xi(2Dxi)

雖然 xi+xiDxi2xi(2Dxi) 看起來很像,不過計算時用後者,意義上的精度會是前者的兩倍。

如果把第 i 步的錯誤設為 εi=1Dxi,則第 i+1 步的錯誤就會是:

εi+1=1Dxi+1=1Dxi(2Dxi)=12DxiD2xi2=(1Dxi)2=εi2

也就是說誤差會持續被開平方根,但同時也表示初始值 x0 不能亂選, 最終取得 N 位精度需要 O(logN) 的時間。

進階模運算

數論函數

其實數論函數本身沒有什麼特殊的,基本上就是符合 f:Z+C。 簡單來說就是滿足吃進一個正整數,吐出一個 ZRC 的都算。

積性函數

一個積性函數要滿足:

  • 定義域是 Z+,也就是說要是數論函數
  • gcd(a,b)=1f(a)f(b)=f(ab)

以下都是積性函數:

  • Φ(n) — 歐拉函數
  • μ(n) — 莫比烏斯函數
    • {μ(n)=1n=1μ(n)=(1)kn=p1p2pkμ(n)=0n  1 
  • gcd(n,k) (當 k 固定)— 最大公因數
  • 1(n) — 1 函數
    • 1(n)=1

另外積性函數有個很重要的性質:

n=p1a1p2a2pkakf(n)=f(p1a1)f(p2a2)f(pkak)

狄利克雷卷積

定義狄利克雷卷積的目的在於: 讓數論函數的乘法是狄利克雷卷積、加法是普通加法, 就可以讓數論函數是一個交換環(一個環但多滿足交換律)。

定義兩個數論函數的狄利克雷卷積如下:

(fg)(n)=d|nf(d)g(nd)

注意它也有另一個形式:

(fg)(n)=dd=nf(d)g(d)

而狄利克雷卷積滿足下列運算:

  • 交換律 fg=gf
    • 證明:用第二種形式就很顯然,因為整數乘法有交換律。
  • 結合律 (fg)h=f(gh)
    • 證明:用第二種形式也很顯然,因為下面總和會是三個東西乘起來 abc=n 然後 f(a)g(b)h(c) 的總和。
  • 分配律 f(g+h)=fg+fh
    • 證明:可以自己驗。
  • 有單位函數 ϵ 使得 fϵ=f
    • 其中 {ϵ(n)=1n=1ϵ(n)=0otherwise
  • 對於任意數論函數 f,若 f(1)0,則存在唯一的 f1 ,使得 ff1=ϵ
    • 可以先構造,因為要有 f(1)f1(1)=1f1(1)=f(1)1
      而對 n1,有以下這件事:

      d|nf(d)f1(nd)=0

      所以可以直接用 f(1)f1(n)=d|n,d1f(d)f1(nd) 推出 f1(n)=d|n,d1f(d)f1(nd)f(1)

    • 因為前面有交換律所以自然會有 ff1=f1f=ϵ

    • 假如有兩個 g,h 都有 fg=fh=ϵ,那 ϵ=fh=fgg1h=fg1hg=h 所以 g=h,反元素唯一。

  • 積性函數的狄利克雷卷積還是積性函數
    • 證明: 令 gcd(a,b)=1
      (fg)(ab)=d|abf(d)g(abd)=da|adb|bf(dadb)g(abdadb)=da|adb|bf(da)f(db)g(ada)g(bdb)=da|af(da)g(ada)db|bf(db)g(bdb)=(fg)(a)(fg)(b)
  • f,g,fg 三個裡面有兩個是積性的,那剩下的也是。
    • 證明:如果 f,g 是那直接根據上面。如果不是那不失一般性假設 f,fg 是。 反證一下,根據良序定理(粗淺的說,我們可以把整數數對排好順序,然後找最小的東西), g 若不是積性,那可以找到最小的組合 a,b 互質使得 g(a)g(b)g(ab)。 這邊最小的定義可以找 a+b 最小的。 這代表說所有 a+b<a+b 都會還有 g(a)g(b)=g(ab)

      (fg)(a)(fg)(b)=pq=af(p)g(q)rs=bf(r)g(s)=pq=a,rs=bf(p)g(q)f(r)g(s)=pq=a,rs=bf(pr)g(q)g(s)=f(1)g(a)g(b)+pq=a,rs=b,pr1f(pr)g(q)g(s)=f(1)g(a)g(b)+xy=ab,pr1f(pr)g(qs)()=f(1)g(a)g(b)+(fg)(ab)g(ab)=g(a)g(b)+(fg)(ab)g(ab)

      () 這步第一個是因為只有 qs=ab 這組是不能用上面的方法拿掉的(這剛好也是我們想要的)。 第二是因為 (p,s),pa,sb 的所有方法會一一對應到 xab, 因為 a,b 互質,任何質因數一定只有一邊有效。

      所以 g(a)g(b)=g(ab),矛盾。g 是積性。

  • 積性函數的反元素(不是反函數)還是積性函數
    • 由上一點可證

莫比烏斯反演

首先,觀察到

d|nμ(d)=[n=1]

原因是因為: 假如 nk 種質因數,

d|nμ(d)=(k0)(k1)+(k2)+(1)k(kk)={1n=1(11)k=0otherwise

(考慮到取二次方以上都是 0

n=1原式=1,否則原式=0。 所以我們有 d|nμ(d)=ϵ。 也就是說:

d|nμ(d)1(nd)=ϵ(n)μ1=ϵμ1=1

根據這個性質,可以發現如果有兩個函數滿足 F(x)=d|xf(d), 就可以透過莫比烏斯函數的逆函數做出這個轉換:

F(x)=d|xf(d)1(nd)F=f1Fμ=f

對於某些跟因數有關的函數可以做出這樣的轉換。

因數

因數個數

對於一個整數 N,他的因數個數是 d(N)

簡單的因數個數 d(N) 的上界是 O(N), 用於估計的話最實際的方法就是跑個爆搜去看看, 不過因數個數也是有一個數學上的上界的, 這邊會一步一步推導出來。

首先需要知道的有:

(1)ex1+x+x22!+x33!+1+x

(在 x 很小的時候,ex 的泰勒展開式。)

接下來,如果 Nk 個質數,可以把 N 表示成:

(2)N=p1a1pkak

然後又由一點點的排列組合,d(N) 可以表示為:

(3)d(N)=(a1+1)(ak+1)

現在要證明的是,對於任何 ε>0,都有一個常數 Cε 使得:

(4)d(N)CεNε

換句話說就是:

d(N)=o(Nε)

證明的方式是, 首先,把 (4) 寫成這個樣子:

(5)d(N)NεCε

左邊的部分用 (2)(3) 帶入,得到:

(6)i=1kai+1piεai

把每個質因數分開討論, 分母是指數成長,分子是線性成長,所以在這個條件下 ai 夠大時分母會超過分子。 但是 ε 是可以任意選的,所以可能有些組合會讓分子大於分母, 不過可以發現,要達成分子大於分母,必須要 ai 夠小、pi 也夠小。

對於夠大的質數,想要比較的是 piεaiai+1

由於 eaiai+1(使用 (1) 的泰勒展開式), 可以先確定當 piεaieaiai+1 的時候, pie1/ε,而且這一項的貢獻最多只有 1

那對於 pi<e1/ε 的質數呢?
由於 ai 的時候,ai+1piεai 會趨近於 0, 所以這個 ai+1piεai 一定會有某個常數 Cpi,ε 是他的上界, 因此,所有小於 e1/ε 的質數都只有對 (6) 有有限度的貢獻, 但是總共的小質數數量也被 ε 給限制住了, 所以 (6) 就會小於某個只隨著 ε 變動的常數 Cε,因此原式得證。

競程中似乎有一個上界是 O(N3),這個上界可以用剛剛所證明的代進數字, 不過這樣估因為常數的關係會有點不準。

有了這個上界之後,可以更進一步把他限制得更緊:

首先,要達到更緊的上界,要先把 Cε 求出比較精確的值, 回去考慮 (6)

(6, revisited)i=1kai+1piεai

分母的部分可以用剛剛用過的 (1)(泰勒展開式)處理一下:

piεai=eεailnpi1+εailnpi

所以

(7)ai+1piεaiai+11+εailnpiO(1εlogpi)

當然這個上界可以再逼近一點,不過 ex 的泰勒展開式在 x 很小的時候相當的精確,所以能逼近的不多。

(7) 代入 (6),會發現 (6) 的上界是:

p<e1/εO(1εlogpi)

為了方便討論,把小於 e1/ε 的質數的上界設為 e1/εlogpi 的上界設為 log2 並當作常數,
當然還是可以再更逼近一點,但是這裡有個小技巧:
在處理 AB 這類的上界的時候,除了 A 很接近 1 的情況,否則把 B 限縮在更好的上界會比限縮 A 更有效。

(6)O(1ε)e1/ε=eeO(1/ε)


(因為是漸近符號,可以這樣操作)

d(N)eeO(1/ε)Nεd(N)NO(1/loglogN)

質因數種類數

首先,先定義一個東西叫做質數階乘,對於質數 P

P#=pP and p is primep

把質因數種類數表示成 ω(n),顯然最差的狀況會發生在 n 是質數階乘的時候,

根據一些酷酷的,有這個東西:

logx#=ϑ(x)x

所以 p#=e(1+o(1))p

p 是第 k 個質數,所以有 pklnk, 由於 logp#=ϑ(p)p, (ϑ 是 first Chebyshev function) 這樣就會推導出:

k=ω(p#)=ω(e(1+o(1))p)=ω(e(1+o(1))klnk)=ω(k(1+o(1))k)

接下來就是把 k 解出來了,因為:

p#=k(1+o(1))k

所以:

k=lnp#W(lnp#)

其中 W 是 Lambert W function,簡單來說是 f(x)=xex 的反函數,

把它用上下界代入:

k=lnp#log(lnp#)O(loglog(lnp#))lnp#log(lnp#)=O(logp#loglogp#)

由這個結論得知,ω(n) 會是 O(lognloglogn) 的。

Reference

The Divisor Bound
Primorial
Prime number theorem
Upper bound number of distinct prime factors
Chebyshev function
Inequalities On The Lambert W Function And Hyperpower Function