0. 阅读前须知
本文章仅存在于整数范围内。
a∣b 表示 a 是 b 的因数。
gcd(a,b) 表示求最大公因数。
1. 同余
1.1 同余的定义
对于两个整数 a,b ,如果它们除以 p 的余数相同,则称它们模 p 同余,记作:
a≡b(modp)
带余除法 a÷p=k⋯⋯b 也可写成 a≡b(modp)
在模 p 意义下,只有 0∼p−1 这 p 个数。
1.2 同余的计算性质
如果 a≡b(modp):
a±k≡b±k(modp)
a×k≡b×k(modp)
ak≡bk(modp)
a≡b(modp)⇒p∣(a−b)
2. 扩展欧几里得(exGCD)
2.1 exGCD 是干嘛的?
扩欧用于解形如下面的不定方程:
ax+by=gcd(x,y)
2.2 exGCD 怎么写?
void exgcd(int a,int b,int &x,int &y)
{
if(b==0)
{
x=1,y=0;
return;
}
exgcd(b,a%b,y,x);
y-=a/b*x;
}
证明见 oi-wiki
2.3 exGCD 解的值域
由于 ax+by=gcd(a,b),所以必然有的解会爆 long long。
万幸的是,如果 b=0,那么必然有一组解满足 ∣x∣≤b,∣y∣≤a。
3. 裴蜀定理
方程 ax+by=c 有解当且仅当 gcd(a,b)∣c。
4. 逆元
4.1 逆元的定义
如果 ax≡1(modp),则我们称 x 是 a 在模 p 意义下的逆元,记作 x=a−1。
显然,x 和 a1=a−1 在模 p 意义下是等价的。
4.2 逆元存在性定理
x 在模 p 意义下存在逆元当且仅当 a⊥p。(a 与 p 互质)
证明略。
- 推论:当且仅当模数 p 是质数,[1,p−1] 内所有整数都存在模 p 意义下的逆元。0 没有逆元。此时称 [1,p−1] 是模 p 意义下的一个乘法群。
4.3 逆元的一些性质
- 定理:模 p 意义下,若存在 x 的逆元 x−1,则唯一。
- 定理:模质数 p 意义下,[1,p−1] 内所有整数的逆元互不相同。
4.4 求逆元
可以用 exGCD 求逆元。
方程为:xx−1+pk=1
推导过程之后写。
4.5 线性求 1∼n 的逆元
for(int i = 2; i <= n; i++)
ans[i] = (p - ans[p % i] * (p / i) % p);
4.6 线性求 a1∼an 的逆元
记 pi=j=1∏iaj。
那么我们可以用exGCD求出 pn−1,记作 vn。
此时 vn×an=(i=1∏n−1ai)−1,记作 vn−1,同理,可以求出 v1∼vn−2。
则 ai−1=vi×pi−1
4.6 求 ba 的逆元
设 ba≡x(modp)
那么 a≡bx(modp)
记 x′=ax,那么 bx′≡1(modp)。
这个方程是可以解的。最终 x=ax′。
5. 一些定理
5.1 费马小定理
lhq:费马小
费马小定理:如果质数 p 满足 a⊥p,则 ap−1≡1(modp)
- 另一个形式:对于任意整数 a,ap≡a(modp)
总所周知,费马小也是可以求逆元的。
- 条件:p 为质数。
- 方法:a−1=ap−2modp
5.2 威尔逊定理
威尔逊定理(Whison Theorem):p 是质数的充要条件是 (p−1)!≡1(modp)
5.3 欧拉定理
欧拉定理(Eular Theorem):
a⊥p⇒aφ(p)≡1(modp)
其中 φ(m) 表示 [1,m] 中与 m 互质的数的个数。
5.4 卢卡斯定理
卢卡斯(Lucas)定理:
(mn)modp=⌊pn⌋⌊pm⌋×(mmodpnmodp)modp
一般来说,我们不会只调用一次 Lucas。因为 Lucas 可以被 p=2 卡掉,所以这个时候可以递归调用 Lucas。即
Lucas(n,m)=(mn)×Lucas(pn,pm)
6. 中国剩余定理
6.0 中国剩余定理的来源
「物不知数」问题:有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?
该问题最早见于《孙子算经》中,并有该问题的具体解法。宋朝数学家秦九韶于 1247 年《数书九章》卷一、二《大衍类》对「物不知数」问题做出了完整系统的解答。上面具体问题的解答口诀由明朝数学家程大位在《算法统宗》中给出:
三人同行七十希,五树梅花廿一支,七子团圆正半月,除百零五便得知。
6.1 线性同余方程组
给定 n 个线性同余方程:
⎩⎨⎧x≡a1(modm1)x≡a2(modm2)⋯x≡an(modmn)
mi 两两互质,求 x 的通解。
6.2 中国剩余定理(CRT)
记 M=∏mi,Mi=miM,ti 是在 Mi 在模 mi 意义下的逆元。
则:
x=kM+i=1∑naitiMi
6.3 扩展中国剩余定理(exCRT)
如果 mi 两两不互质,那么就不能使用 CRT 了。
那什么是 exCRT 呢?
如果我们知道两个同余方程,将其合并成一个,这样就可以一个接着一个合并了。
见?