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