莫反,欧拉,扩展欧拉

对欧拉定理 , 莫比乌斯等过敏者请慎重食用

  • 简单涉猎一下数论,讲的顺序很迷,,,一些东西了解个大概就好,莫要深究哈
  • 数论这个东西, 尤其像莫比乌斯和欧拉这种, 基本上就是靠临场推式子, 会证明只是个心理基础(当然你也可以直接用,但明白了为什么,用起来会更得心应手)
  • 若无特殊说明,则突然出现的某个函数默认为积性函数
  • 应该用不了\(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 狄利克雷卷积

我们用符号 * 表示两个函数卷积

形如

\[\large (f * g) (n) = \sum_{d|m} f(d) g(\frac{n}{d}) \]

“(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]\)),会发生什么?

\[\large f * e = \sum_{d | n} f(d)e(\frac{n}{d}) \]

然后显然这个式子只在 \(d=n\) 时有值

所以上式等价于

\[\large f * e = \sum_{d|n}f(d)[d = n] = f \]

写简洁点 \(\large f*e = f\)

这个很重要

2/0莫比乌斯

莫比乌斯函数,符号为 \(\mu\)

它表示的值咋算呢,\(Ame\) 大佬给了一个神奇的定义式, 还有一个计算公式

定义式:

\[\large \mu(m) = \begin{cases} (-1)^r & \text{$m = p_1p_2...p_r$}\\ 0 & \text{$m$能被某个$p^2$整除} \end{cases} \]

计算式

\[\large \sum_{d|n}\mu(d) = [n=1] \]

细想,上面的式子可不可以用狄利克雷卷积表示呢?

左式多乘以一个恒等函数应该没关系吧

右式貌似也可以用元函数换掉,emm....有了!

\[\large\sum_{d|n}\mu(d)id_0(\frac{n}{d}) = e(n) \]

\(\mu * id_0 = e\)

这个很重要


回想上面已经证明得到的两个卷积式

\(\large f *e = f\)

\(\large \mu * id_0 = e\)

有了这个,接下来就说说莫比乌斯反演

先上公式

\[\large g(m) = \sum_{d|m}f(d) \]

卷积表示为 \(g = f * id_0\) (1)

\[\large f(m) = \sum_{d|m}\mu(d)g(\frac{m}{d}) \]

卷积表示 \(\large f = g * \mu\) (2)

我们现在的任务就是由(1)推出(2)或从(2)推出(1),只要证明这两个式子中某个式子使用另一个式子可以成立就行,注意我不是证它俩等价!!!

推吧(下面的证明即是把(1)当做结论, (2)为衍生式来推导)

\[\large{ g * \mu \\ = f*id_0*\mu\\ =f*(id_0*\mu)\\ =f*e\\ =f } \]

QED! QVQ

3 / 0 欧拉函数与定理、费马小定理证明

3 / 1 函数定义

​ 在数论中,对于正整数N,少于或等于N ([1, N]),且与N互质的正整数(包括1)的个数,记作 φ(n)。

3 / 2 函数性质

​ (1)对于一个质数 p,和一个正整数 k。

\[\large \varphi(p ^ k) = p ^ k - p ^ {k - 1} = (p - 1) * p ^ {k - 1} \]

​ (2)m,n互质

\[\large \varphi(m*n) = \varphi(m) * \varphi(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),都有

\[\large a^{\varphi(n)} ≡ 1 (mod \ n) \]

​ 此为 欧拉定理

    (6)当n=p 且 a与素数p互质(即:gcd(a,p)=1)则上式有:

\[\large a^{p-1} ≡ 1 (mod \ n) \]

​ 为 费马小定理

    (7)

\[\large \varphi(m) = \sum_{d|m}\mu(d)\frac{m}{d} \]

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)这是个好东西呢

    前面的莫比乌斯反演公式还记得不?

    若

\[\large g(m) = \sum_{d|m}f(d) \]

    则

\[\large f(m) = \sum_{d|m}\mu(d)g(\frac{m}{d}) \]

    我现在先给你这么一个式子, 这个式子为啥成立的证明听我口胡

\[\large (\varphi * id_0) ≡ id_1 \]

​ 然后用基本的莫比乌斯反演式, 就可以求出(7)    

​ 于是我们可以用这个式子去求解欧拉函数

\[\large \varphi(m) = \sum_{d|m}\mu(d)\frac{m}{d} \]

   

3 / 4 欧拉定理证明

    (缓一缓。。。。。(¯﹃¯)咱们继续)

\[\large a^{\varphi(n)} = 1 (mod \ n) \]

    设

\[\large x_1 , x_2 , x_3 ...... x_{\varphi(n)} \]

​ 是 1~n 中与 n 互质的数。1<=i<=φ(n)

\[\large m_1=a*x_1,m_2=a*x_2 ...... m_{\varphi(n)}=a*x_{\varphi(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 变得短小(精悍)

   这时候我们要用一个叫做 欧拉降幂 的东东

   欧拉降幂是个啥?

   直接上式子

\[\large a^b = \begin{cases} a^{b \ mod \ \varphi(p)} & \text{gcd(a,p) = 1}\\ a^b & \text{gcd(a,p) != 1, b < $\varphi(p)$}\\ a^{b \ mod \ \varphi(p) \ + \ \varphi(p)} & \text{gcd(a,p) != 1, b >= $\varphi(p)$} \end{cases} \]

   证明

4 / 1\(a^b = a^{b \ mod \ \varphi(p)} \ (mod \ p)\),\(gcd(a,p) = 1\)

\[\large { \begin{aligned} &a^{b \ - \ b \ mod \ φ(p)} \ * \ a^{b \ mod \ φ(p)} = a^{b \ mod \ φ(p)} (mod \ p)\\ \\ &b \ - b \ mod \ φ(p) = k \ * \ φ(p)\\ \\ &a^{b \ - b \ mod \ φ(p)} = a^{k \ * \ φ(p)} = (a^{φ(p)})^k = 1 (mod \ p)\\ \\ &so:\\ \\ &a^b = a^{b \ - \ b \ mod \ φ(p)} \ * \ a^{b \ mod \ φ(p)} = a^{b \ mod \ φ(p)} (mod \ p) \end{aligned} } \]

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{ \begin{aligned} &x^{\varphi(s)} = 1 \ (mod \ s)\\ \\ &x^{\varphi(s) * \varphi(x^r)} = 1 \ (mod \ s)\\ \\ &x^{\varphi(p)} = 1 \ (mod \ s)\\ \\ &x^{\varphi(p)} = k*s+1\\ \\ &同乘x^r\\ \\ &x^{\varphi(p)+r} = k*s*x^r+x^r\\ \\ &x^{r \ + \ \varphi(p)} = x^r \ (mod \ p)\\ \\ &又有x^{\varphi(p)} = 1 \ (mod \ p)\\ \\ &故x^{\varphi(p) * k} = 1 \ (mod \ p),k >= 0\\ \\ &x^{r \ + \ \varphi(p)*k} = x^r \ (mod \ p)\\ \\ &(一长溜式子过于恶心,这里和谐一下)\\ \\ &x^b ≡ x^{b-r+r} = x^{b-r+\varphi(p)+r} = x^{b+\varphi(p)} \ (mod \ p) b≥r,b-r≥0\\ \\ &故\\ \\ &x^b = x^{b \ + \varphi(p)} \ (mod \ p)\\ \\ &x^b = x^{b \ mod \ \varphi(p) + \varphi(p)} \ (mod \ p)\\ \\ &(x^{b \ mod \ \varphi(p) + \varphi(p)} = x^{b \ mod \ \varphi(p) + k*\varphi(p)} = x^b \ (mod \ p)) \end{aligned} } \]

​ 得出\(\large x^b = x^{x \ mod \ \varphi(p) + \varphi(p)} \ (mod \ p)\)

​ 对质数的幂同样适用

\[\large{ \begin{aligned} &(x^k)^b = x^{k*b} \\ \\ &= x^{\varphi(p) + k*b} \\ \\ &= x^{k*\varphi(p) + k*b} \\ \\ &= (x^k)^{\varphi(p)+b} \\ \\ &= (x^k)^{b \ mod \ \varphi(p)+\varphi(p)} \ (mod \ p)\\ \\ &b >=\varphi(p),k>0 \end{aligned} } \]

​ 将 a 分解

\[\large a = \prod_{i}^nx_i^{k_i} \]

​ 每个 x 都可满足上面的公式, 乘起来就是

\[\large a^b = a^{b \ mod \ \varphi(p) +\varphi(p)} \ (mod \ p) \]

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);
}
posted @ 2021-07-12 16:43  aleph_blanc  阅读(258)  评论(0编辑  收藏  举报