對歐拉定理 , 莫比烏斯等過敏者請慎重食用
- 簡單涉獵一下數論,講的順序很迷,,,一些東西了解個大概就好,莫要深究哈
- 數論這個東西, 尤其像莫比烏斯和歐拉這種, 基本上就是靠臨場推式子, 會證明只是個
心理基礎(當然你也可以直接用,但明白了為什么,用起來會更得心應手)
- 若無特殊說明,則突然出現的某個函數默認為積性函數
- 應該用不了\(60min\)(
希望)- 這堂課應該沒題(大概)
- 有什么不懂的, 這課件上面又沒說(或只打了個“顯然”什么的),直接問我, 我能口胡就口胡,口胡不了就讓\(YLCH\)上((q(>-<)p
前(che)搖(dan)
積性函數:
對於任意互質的整數a和b有性質\(\large f(a*b)=f(a)*f(b)\)的數論函數。
完全積性函數:
對於任意整數a和b有性質\(\large f(a*b)=f(a)*f(b)\)的數論函數。
0/0 引入幾個函(fei)數(hua)
1.恆等函數_不管參數是什么,函數值恆為1
\(I(n) = 1\) 或 \(id_0 (n) = 1\)
2.元函數_只在參數為1時函數值為1,其余情況皆是0
\(e(n) = [n = 1]\)
e 實際上是 \(\large\epsilon\),但是太難打了......
3.單位函數_函數值就是參數值
$ id_1 (n) = n $
這三個函數都是完全積性函數
。。。有點覺得這三個函數沒啥用(就跟廢話一樣)?
不!它們有大用!(其實的確挺廢物的)
下面是一些稍作了解的函數全是廢話
積性函數
φ(n) -歐拉函數,計算與n互質的正整數之數目
μ(n) -莫比烏斯函數,關於非平方數的質因子數目
d(n) -n的正因子數目
σ(n) -n的所有正因子之和
σk(n)-因子函數,n的所有正因子的k次冪之和,當中k可為任何復數。
I(n) -不變的函數,定義為 1(n) = 1 (完全積性)
Id_k(n)-單位函數,定義為 Idk(n) = nk(完全積性)id_0(n) = I(n) = 1
ε(n) -定義為:若n = 1,ε(n)=1;若 n > 1,ε(n)=0。別稱為“對於狄利克雷卷積的乘法單位”(完全積性)
λ(n) -劉維爾函數,關於能整除n的質因子的數目
γ(n),定義為γ(n)=(-1)^ω(n),在此加性函數ω(n)是不同能整除n的質數的數目
另外,所有狄利克雷特征均是完全積性的[1]
1/0 狄利克雷卷積
我們用符號 * 表示兩個函數卷積
形如
“(n)”在平常可以省略, n 指參數大小
(好了接下來我就把它省略了,因為 * 這玩意容易和乘積弄混,所以下面仔細聽我說)
他滿足
交換律 $ \large f * g = g * f$
結合律 $\large (f * g) * h = f * (g * h) $
分配律 $\large (f + g) * h = f * h + g * h $
證明口胡就行
好了, 接下來開始跟我一起進行無厘頭的推導)))
試想, 有一個積性函數 \(f\) , 卷上元函數(\(e(n) = [n = 1]\)),會發生什么?
然后顯然這個式子只在 \(d=n\) 時有值
所以上式等價於
寫簡潔點 \(\large f*e = f\)
這個很重要
2/0莫比烏斯
莫比烏斯函數,符號為 \(\mu\)
它表示的值咋算呢,\(Ame\) 大佬給了一個神奇的定義式, 還有一個計算公式
定義式:
計算式
再細想,上面的式子可不可以用狄利克雷卷積表示呢?
左式多乘以一個恆等函數應該沒關系吧
右式貌似也可以用元函數換掉,emm....有了!
即 \(\mu * id_0 = e\)
這個很重要
回想上面已經證明得到的兩個卷積式
\(\large f *e = f\)
\(\large \mu * id_0 = e\)
有了這個,接下來就說說莫比烏斯反演
先上公式
若
卷積表示為 \(g = f * id_0\) (1)
則
卷積表示 \(\large f = g * \mu\) (2)
我們現在的任務就是由(1)推出(2)或從(2)推出(1),只要證明這兩個式子中某個式子使用另一個式子可以成立就行,注意我不是證它倆等價!!!
推吧(下面的證明即是把(1)當做結論, (2)為衍生式來推導)
QED! QVQ
3 / 0 歐拉函數與定理、費馬小定理證明
3 / 1 函數定義
在數論中,對於正整數N,少於或等於N ([1, N]),且與N互質的正整數(包括1)的個數,記作 φ(n)。
3 / 2 函數性質
(1)對於一個質數 p,和一個正整數 k。
(2)m,n互質
歐拉函數是積性函數。
(3)對於任意整數 x,都有
\(\large\varphi(x)=x\prod^n_{i=1}(1-\frac{1}{p_i}))\)
(4)對於某一奇數 n,φ(2*n) = φ(n)。
(5)對於任意兩個互質的數 a,n(n>2),都有
此為 歐拉定理。
(6)當n=p 且 a與素數p互質(即:gcd(a,p)=1)則上式有:
為 費馬小定理
(7)
3 / 3 函數性質證明
實在不想打latex
(1)在性質(1)中,很明顯,k = 1時,φ(pk) = φ(p) = p-1。
已知小於 \(p^k\) 的正整數的個數為 \(p^k-1\),
其中和 pk 不互質的正整數有 { p×1,p×2,...,p×(p(k-1)-1)},共計p(k-1)-1個,
所以 φ(pk) = pk - p(k-1) = (p-1)*p(k-1)。
(2)關於性質(2)性質
對於 m*n,它是 m 和 n 的最小公倍數,
與它不互質的數有
\(1*n , 2*n,3*n.......m*n\)
和
\(1*m,2*m,3*m.....n*m\) 共 m+n-1 個,
所以\(φ(m*n) = m*n-(m+n-1) = (m-1)*(n-1) = φ(m)*φ(n)\)。
(3)對於性質(3)(先說好這東西咋證明我也沒有什么好辦法)
眾所周知,任意一個整數n都可以表示為其質因子的乘積:
那我們就假設 n = (a[1] ^ k[1]) * (a[2] ^ k[2]) * ......* (a[e] ^ k[e])。
a[] 為 n 的某一質因數,e 為不同的質因數個數,k[i] 為相應的質因數 a[i] 的對應個數。
n*(1-1/a[i])是不是就表示 n 中除去公因數為 a[i] 的數的個數?
那么 n * (1-1/a[1]) * (1-1/a[2]) * (1-1/a[3]) * ... * (1-1/a[e]) 就是 φ(n)唄。
沒錯,這是口糊的感性證明。。。。。
(4)不用說吧。。。就是 (2)
(5)(6)見下歐拉定理證明
(7)這是個好東西呢
前面的莫比烏斯反演公式還記得不?
若
則
我現在先給你這么一個式子, 這個式子為啥成立的證明聽我口胡
然后用基本的莫比烏斯反演式, 就可以求出(7)
於是我們可以用這個式子去求解歐拉函數
3 / 4 歐拉定理證明
(緩一緩。。。。。(¯﹃¯)咱們繼續)
設
是 1~n 中與 n 互質的數。1<=i<=φ(n)
- 對於這其中任意兩個不相同的數 \(m_s\) 與 \(m_r\) 都不模 n 同余
這里用反證法證明:// s 和 r 都是下標
若 \(m_s ≡ m_r (mod \ n)\),咱們假設\(m_s\)更大。那么\(m_s - m_r = a*(x_s-x_r)\)
a與n互質,\(x_s-x_r<n\),因此 \(a*(x_s-x_r)\) 一定無法被 n 整除。
即便 \(x_s-x_r\) 可能不與 n 互質
也就是說這 φ(n) 個數 %n 都不同余。
φ(n)個數有φ(n)種余數。\(a*x_i\) 和 n 互質!
2)那么這些數的余數和 n 的關系又是什么?
- 這些數除n的余數都與n互質
假設其余數和 n 有公因數 r。
那么 $\large a * x_i=p * n + q * r,n = k * r $---> \(a * x_i = (p * k + q) * r\).
\(a*x_i\) 和 n 不互質了!
那么這(指 m 序列)些數%n,都在\(x_1,x_2,x_3……x_{φ(n)}\)中,因為這(指 x 序列)是1~n中與n互質的所有數,而m余數又小於且互質於n。
由上得出:
\(\large m_1 * m_2 * m_3 … … m_{φ(n)} ≡ x_1 * x_2 * x_3 … … x_{φ(n)} (mod \ n)\)
\(\large a ^ {φ(n)} * (x_1 * x_2 * x_3 … … x_{φ(n)}) ≡ x_1 * x_2 * x_3 … … x{φ(n)} (mod \ n)\)
化簡
\(\large a ^ {φ(n)} ≡ 1 (mod \ n)\)
\(QED!\)
3 / 5 費馬小定理證明
\(\large a ^ {p \ - \ 1} ≡ 1 (mod \ n)\)
\(\large a ^ {φ(p)} ≡ 1 (mod \ n)\)
得證。┐(´∇`)┌
4 / 0 歐拉降冪證明
讓你求這么一個式子
$a^b mod \ p $ (不要求a, c 互質)
當然沒那么簡單,
a = 56895, b = 10000000052
求吧(帶着和善的笑容)
很明顯, 問題不在 a 而在 b
數太大了,我們需要想辦法讓 b 變得短小(精悍)
這時候我們要用一個叫做 歐拉降冪 的東東
歐拉降冪是個啥?
直接上式子
證明
4 / 1\(a^b = a^{b \ mod \ \varphi(p)} \ (mod \ p)\),\(gcd(a,p) = 1\)
4 / 2...... Need I zheng it? ARE YOU SURE ?
4 / 3 \(a^b = a^{b \ mod \ \varphi(p) \ + \ \varphi(p)} \ (mod \ p) \ \ gcd(a,p) \ != 1,b >= \varphi(p)\)
上述即是普遍情況,a,p 不互質
從特殊情況\(gcd(a,p) = a\)對其進行上述式證明
令 \(p = s * x^r,gcd(s,x) = 1\)
因而
得出\(\large x^b = x^{x \ mod \ \varphi(p) + \varphi(p)} \ (mod \ p)\)
對質數的冪同樣適用
將 a 分解
每個 x 都可滿足上面的公式, 乘起來就是
QED
5 / 0 結語(甩個水題)
\(luogu P5091\)
題目背景
出題人也想寫有趣的題面,可惜並沒有能力。
題目描述
給你三個正整數,a,m,b你需要求:\(a^b \ mod \ m\)
輸入格式
一行三個整數,a,m,b
輸出格式
一個整數表示答案
數據范圍
\(1≤a≤10^9\),\(1≤b≤10^{20000000}\),\(1≤m≤10^8\)
#include <bits/stdc++.h>
#define ll long long
#define _ 0
using namespace std;
ll a, m, b;
bool flg;
inline ll read (int p) {
ll x = 0;
char ch = getchar();
while (! isdigit (ch)) ch = getchar ();
while (isdigit (ch)) {
x = (x << 1) + (x << 3) + (ch ^ '0');
if (x >= p) flg = 1; // 記錄是否為第三種情況
x %= p;
ch = getchar ();
}
return x + (flg ? p : 0);
} // 這里的快讀雖然並不能提速,但可以實現 b 的 mod
inline ll fast_pow (ll a, ll b, ll p) { // 快速冪(當然不用也行, 就是慢一點)5.12s
ll base = a, ans = 1;
while (b) {
if (b & 1) ans = ans * base % p;
b >>= 1;
base = base * base % p;
}
return ans % p;
}
inline ll phi (int p) {
int a, b;
a = b = p;
for (int i = 2; i * i <= a; ++i) { // 根號就夠了 需要口胡嗎
if (a % i == 0) {
b -= b / i; // 等價於 b = b * (1 - 1 / i), 精度問題
while (a % i == 0) {
a /= i; // 把這幾個質因子全去掉。。。
}
}
}
if (a > 1) { // 應對素數情況 , 同時將最后一個沒有因數用掉
b = b - b / a;
}
return b;
} // 不行你就死記硬背,反正也不長(((
signed main () {
scanf ("%lld%lld", &a, &m);
b = read (phi (m));
/*
int k = a;
for (int i = 2; i <= b; i++) {
a *= k;
a %= m;
}
printf ("%lld", a); // 這么打也能過,就是慢一點,5.12s
*/
printf ("%lld", fast_pow (a, b, m)); // 1.01s
return ~~(0^_^0);
}