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