数论基础
群友的问题
快速幂
关键在于拆分 2 22 = 2 16 + 4 + 2 = 2 16 × 2 4 × 2 2 2^{22}=2^{16+4+2}=2^{16} \times 2^4 \times 2^2 222=216+4+2=216×24×22
10进制快速幂: 高精次幂的解决方案
数论基础
取余 % 向下取整
取模
m
o
d
\bmod
mod 向0取整
取模性质:
a
o
p
t
b
(
m
o
d
p
)
=
(
a
(
m
o
d
p
)
o
p
t
b
(
m
o
d
p
)
)
(
m
o
d
p
)
,
o
p
t
=
+
,
−
,
×
,
o
p
t
≠
/
a\,opt\,b\pmod p=(a\pmod p\,opt\,b\pmod p)\pmod p,opt=+,-,\times,opt\ne/
aoptb(modp)=(a(modp)optb(modp))(modp),opt=+,−,×,opt=/
a
n
(
m
o
d
p
)
=
(
a
(
m
o
d
p
)
)
n
)
(
m
o
d
p
)
a^n\pmod p=(a\pmod p)^n)\pmod p
an(modp)=(a(modp))n)(modp)
整除
a
∣
b
a \mid b
a∣b
0可以被任意非0整数整除
因数(约数) 默认正因数
遍历所有因数
唯一分解定理
x
=
∏
i
=
1
k
p
i
a
i
x = \prod\limits_{i=1}^{k}p_{i}^{a_i}
x=i=1∏kpiai
分解质因数
因数个数 f ( x ) = ∏ i = 1 k ( a i + 1 ) f(x)=\prod\limits_{i=1}^{k}(a_i+1) f(x)=i=1∏k(ai+1)
因数个数上界估计: f ( x ) ≪ x f(x) \ll \sqrt{x} f(x)≪x
同余
a
m
o
d
p
=
b
a \mod p = b
amodp=b,称
p
p
p 为模数,
a
a
a 同余于
b
b
b 模
p
p
p ,记为
a
≡
b
(
m
o
d
p
)
a \equiv b \pmod{p}
a≡b(modp)
同余的性质
- 同余是等价关系,具有:
- 自反性: a ≡ a ( m o d p ) a \equiv a \pmod{p} a≡a(modp)
- 对称性: a ≡ b ( m o d p ) ⟺ b ≡ a ( m o d p ) a \equiv b \pmod{p} \iff b \equiv a \pmod{p} a≡b(modp)⟺b≡a(modp)
- 传递性: a ≡ b ( m o d p ) a \equiv b \pmod{p} a≡b(modp) 且 b ≡ c ( m o d p ) ⟹ a ≡ c ( m o d p ) b \equiv c \pmod{p} \implies a \equiv c \pmod{p} b≡c(modp)⟹a≡c(modp)
- 线性运算: 若
a
,
b
,
c
,
d
∈
Z
,
p
∈
N
+
,
a
≡
b
(
m
o
d
p
)
,
c
≡
d
(
m
o
d
p
)
a,b,c,d \in \mathbb{Z},\ p \in \mathbb{N^+},\ a \equiv b \pmod{p},\ c \equiv d \pmod{p}
a,b,c,d∈Z, p∈N+, a≡b(modp), c≡d(modp),则有:
- a ± c ≡ b ± d ( m o d p ) a \pm c \equiv b \pm d \pmod{p} a±c≡b±d(modp)
- a × c ≡ b × d ( m o d p ) a \times c \equiv b \times d \pmod{p} a×c≡b×d(modp)
- 若 a , b ∈ Z , p , q ∈ N + , a ≡ b ( m o d p ) a,b \in \mathbb{Z},\ p,q \in \mathbb{N^+},\ a \equiv b \pmod{p} a,b∈Z, p,q∈N+, a≡b(modp),则有 a q ≡ b q ( m o d p q ) aq \equiv bq \pmod{pq} aq≡bq(modpq) 与 a q ≡ b q ( m o d p ) aq \equiv bq \pmod{p} aq≡bq(modp)
- 若 a , b ∈ Z , p , q ∈ N + , a ≡ b ( m o d p q ) a,b \in \mathbb{Z},\ p,q \in \mathbb{N^+},\ a \equiv b \pmod{pq} a,b∈Z, p,q∈N+, a≡b(modpq),则有 a ≡ b ( m o d p ) a \equiv b \pmod{p} a≡b(modp)
- 若 a , b ∈ Z , p , q ∈ N + , ( p , q ) = d a,b \in \mathbb{Z},\ p,q \in \mathbb{N^+},\ (p,q)=d a,b∈Z, p,q∈N+, (p,q)=d,则当 a q ≡ b q ( m o d p ) aq \equiv bq \pmod{p} aq≡bq(modp) 成立时,有 a ≡ b ( m o d p d ) a \equiv b \pmod{\dfrac{p}{d}} a≡b(moddp)
- 若 a , b ∈ Z , p ∈ N + a,b \in \mathbb{Z},\ p \in \mathbb{N^+} a,b∈Z, p∈N+,令 C ( x , y ) C(x,y) C(x,y) 表示求 x x x 和 y y y 的公因数集合,则当 a ≡ b ( m o d p ) a \equiv b \pmod{p} a≡b(modp) 成立时有 C ( a , p ) = C ( b , p ) C(a,p)=C(b,p) C(a,p)=C(b,p)
数论分块
数论分块是在有两个嵌套求和时 利用*富比尼(Fubini)定理*** 交换两个求和顺序,快速计算内层求和或分块加速外层求和从而达到加速求解的思想
因数个数前缀和
∑
i
=
1
n
∑
d
∣
i
1
=
∑
i
=
1
n
∑
j
=
1
n
[
j
∣
i
]
=
∑
j
=
1
n
∑
i
=
1
n
[
j
∣
i
]
\sum\limits_{i=1}^{n}\sum\limits_{d|i}1=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}[j \mid i]=\sum\limits_{j=1}^{n}\sum\limits_{i=1}^{n}[j \mid i]
i=1∑nd∣i∑1=i=1∑nj=1∑n[j∣i]=j=1∑ni=1∑n[j∣i]
P1403 [AHOI2005] 约数研究
因数和前缀和
∑
i
=
1
n
∑
d
∣
i
d
\sum\limits_{i=1}^{n}\sum\limits_{d \mid i}d
i=1∑nd∣i∑d
P2424 约数和
余数前缀和
∑
i
=
1
n
(
k
m
o
d
i
)
\sum\limits_{i=1}^{n}(k \mod i)
i=1∑n(kmodi)
P2261 [CQOI2007] 余数求和
最大公因数
辗转相除法(欧几里得算法):
g
c
d
(
a
,
b
)
=
g
c
d
(
b
,
a
m
o
d
b
)
gcd(a,b)=gcd(b,a\ mod\ b)
gcd(a,b)=gcd(b,a mod b)
定义
g
c
d
(
a
,
0
)
=
a
gcd(a,0)=a
gcd(a,0)=a
复杂度
O
(
l
o
g
(
m
a
x
{
a
,
b
}
)
)
O(log(max\{a,b\}))
O(log(max{a,b}))
g
c
d
(
a
,
b
)
=
1
gcd(a,b)=1
gcd(a,b)=1 表示
a
a
a 与
b
b
b 互质
互质即为唯一分解形式中没有相等的质因子
证明:
充分性: 令
d
∣
a
d \mid a
d∣a 且
d
∣
b
d \mid b
d∣b,有
a
=
x
d
a=xd
a=xd,
b
=
y
d
b=yd
b=yd,又因
a
m
o
d
b
=
a
−
z
b
=
(
x
−
y
z
)
d
a\mod b = a - zb = (x-yz)d
amodb=a−zb=(x−yz)d
必要性: 令
d
∣
b
d \mid b
d∣b 且
d
∣
(
a
m
o
d
b
)
d \mid (a \mod b)
d∣(amodb),有
b
=
y
d
b=yd
b=yd,
(
a
m
o
d
b
)
=
a
−
z
b
=
x
d
(a \mod b) = a-zb=xd
(amodb)=a−zb=xd 可得
a
=
z
b
+
x
d
=
(
x
+
y
z
)
d
a = zb+xd=(x+yz)d
a=zb+xd=(x+yz)d
发现
(
a
,
b
)
(a, b)
(a,b) 的公因数即为
(
b
,
a
m
o
d
b
)
(b,a \mod b)
(b,amodb) 的公因数,反之亦然,得证
线性同余方程
a
x
≡
d
(
m
o
d
b
)
ax \equiv d \pmod{b}
ax≡d(modb),
x
∈
[
0
,
b
−
1
]
x \in [0,b-1]
x∈[0,b−1]
意义为求解满足
a
x
m
o
d
b
=
d
m
o
d
b
ax \mod b = d \mod b
axmodb=dmodb 的整数
x
x
x
裴蜀定理(Bezout)
令
(
a
,
b
)
=
d
(a,b)=d
(a,b)=d,则一定存在整数
x
x
x 和
y
y
y 满足
a
x
+
b
y
=
d
ax+by=d
ax+by=d 且
d
d
d 是可以得到的最小的整数
证明
存在: 欧几里得算法展开
最小:
d
∣
a
d \mid a
d∣a 且
d
∣
b
d \mid b
d∣b 所以
d
∣
(
a
x
+
b
y
)
d \mid (ax+by)
d∣(ax+by)
a
x
≡
d
(
m
o
d
b
)
a
x
m
o
d
b
=
d
a
x
=
b
y
+
d
a
x
−
b
y
=
d
ax \equiv d \pmod{b} \ ax \mod b = d \ ax=by+d \ ax-by=d
ax≡d(modb)axmodb=dax=by+dax−by=d
有解的条件
扩展欧几里得算法
证明: 数学归纳法
(
a
,
b
)
=
1
(a,b)=1
(a,b)=1 时通解为:
{
x
′
=
x
+
k
b
y
′
=
y
−
k
a
\left\{
解的个数: 有解时个数为
(
a
,
b
)
(a,b)
(a,b)
P5656 【模板】二元一次不定方程 (exgcd)
逆元
当
a
x
≡
1
(
m
o
d
b
)
ax \equiv 1 \pmod{b}
ax≡1(modb) 有解时,
x
x
x 为
a
a
a 在模
b
b
b 下的逆元
注意到此时有解的条件为
(
a
,
b
)
=
1
(a,b)=1
(a,b)=1 即互质,所以逆元唯一
中国剩余定理
求解线性同余方程组:
{
x
≡
a
1
(
m
o
d
p
1
)
⋮
⋮
x
≡
a
n
(
m
o
d
p
n
)
\left\{
其中
p
1
…
p
n
p_1 \dots p_n
p1…pn 两两互质
过程
- 计算 P = ∏ i = 1 n p i P=\prod\limits_{i=1}^{n}p_i P=i=1∏npi
- 对于第
i
i
i 个方程:
- 计算 P i = P p i P_i=\dfrac{P}{p_i} Pi=piP
- 计算 P i P_i Pi 在模 p i p_i pi 下的逆元 P i − 1 P_i^{-1} Pi−1
- 计算 A i = a i P i P i − 1 A_i=a_iP_iP_i^{-1} Ai=aiPiPi−1
- 可得方程组在模 P P P 下的解为 x = ∑ i = 1 n A i ( m o d P ) x=\sum\limits_{i=1}^{n}A_i \pmod{P} x=i=1∑nAi(modP)
证明
首先对于模
p
i
p_i
pi,有
x
m
o
d
p
i
=
∑
i
=
1
n
(
(
A
i
m
o
d
P
)
m
o
d
p
i
)
x \mod p_i=\sum\limits_{i=1}^{n}((A_i \mod P) \mod p_i)
xmodpi=i=1∑n((AimodP)modpi)
令
c
=
A
j
m
o
d
P
c=A_j \mod P
c=AjmodP,有
KaTeX parse error: No such environment: flalign at position 8: \begin{̲f̲l̲a̲l̲i̲g̲n̲}̲ P &…
当
i
≠
j
i \ne j
i=j 时显然
A
j
m
o
d
p
i
=
0
A_j \mod p_i=0
Ajmodpi=0,当
i
=
j
i=j
i=j 时显然
A
j
m
o
d
p
i
=
a
i
A_j \mod p_i = a_i
Ajmodpi=ai
P1495 【模板】中国剩余定理(CRT)/ 曹冲养猪
扩展中国剩余定理
扩展中国剩余定理不要求模数两两互质,因为扩展中国剩余定理是基于扩展欧几里得算法求解的
使用扩展欧几里得算法可以将两个同余式合并为一个:
{
x
≡
a
1
(
m
o
d
p
1
)
x
≡
a
2
(
m
o
d
p
2
)
⋮
⋮
\left\{
令
x
=
p
1
k
1
+
a
1
=
p
2
k
2
+
a
2
x=p_1k_1+a_1=p_2k_2+a_2
x=p1k1+a1=p2k2+a2
移项后可得
p
1
k
1
−
p
2
k
2
=
a
2
−
a
1
p_1k_1-p_2k_2=a_2-a_1
p1k1−p2k2=a2−a1,为二元一次不定方程的形式,此时当
d
=
(
p
1
,
p
2
)
∣
(
a
2
−
a
1
)
d=(p_1,p_2) \mid (a_2-a_1)
d=(p1,p2)∣(a2−a1) 时有解
解得一组解
k
1
′
k_1^\prime
k1′ 和
k
2
′
k_2^\prime
k2′ 后得到通解:
{
k
1
=
k
1
′
+
k
p
2
d
k
2
=
k
2
′
−
k
p
1
d
\left\{
将
k
1
k_1
k1 带入式子可得
x
=
p
1
(
k
1
′
+
k
p
2
d
)
+
a
1
=
[
p
1
,
p
2
]
k
+
p
1
k
1
′
+
a
1
x=p_1(k_1^\prime+k\dfrac{p_2}{d})+a_1=[p_1,p_2]k+p_1k_1^\prime+a_1
x=p1(k1′+kdp2)+a1=[p1,p2]k+p1k1′+a1
此时令
[
p
1
,
p
2
]
[p_1,p_2]
[p1,p2] 为新的
p
p
p,
p
1
k
1
′
+
a
1
p_1k_1^\prime+a_1
p1k1′+a1 为新的
a
a
a 得到一个同余式
x
≡
a
(
m
o
d
p
)
x \equiv a \pmod{p}
x≡a(modp) 继续和其他同余式合并
P4777 【模板】扩展中国剩余定理(EXCRT)
质数筛
质数: 质数计数函数的近似解为 π ( x ) ∼ x ln ( x ) \pi(x) \sim \dfrac{x}{\ln(x)} π(x)∼ln(x)x
埃拉托斯特尼筛:
n
l
o
g
(
l
o
g
(
n
)
)
nlog(log(n))
nlog(log(n))
线性筛: 每个非质数只判定一次
P3383 【模板】线性筛素数
积性函数: 定义域在
N
+
\mathbb{N}^+
N+ 的数论函数
f
(
x
)
f(x)
f(x) 满足
∀
(
x
,
y
)
=
1
\forall (x,y)=1
∀(x,y)=1 都有
f
(
x
y
)
=
f
(
x
)
f
(
y
)
f(xy)=f(x)f(y)
f(xy)=f(x)f(y)
性质:
- 若 f ( x ) f(x) f(x) 和 g ( n ) g(n) g(n) 都是积性函数,则 h ( n ) = f ( n ) g ( n ) h(n)=f(n)g(n) h(n)=f(n)g(n) 也是积性函数
- 若 f ( n ) f(n) f(n) 是积性函数,则 g ( n ) = ∑ d ∣ n f ( d ) g(n)=\sum\limits_{d \mid n}f(d) g(n)=d∣n∑f(d) 也是积性函数
- 任何积性函数都可以用线性筛在线性复杂度内求解前 n n n 项,时间复杂度为 O ( n × c ) O(n \times c) O(n×c),其中 c c c 是对任意质数 p p p 和非负整数 k k k ,求解 f ( p k ) f(p^k) f(pk) 的时间复杂度
加性函数
欧拉函数
定义欧拉函数 φ ( n ) \varphi(n) φ(n) 为小于等于 n n n 且与 n n n 互质的数的个数
- 欧拉函数是积性函数
证明
假设 ( x , y ) = 1 (x,y)=1 (x,y)=1 ,令 a i , j = x i + j a_{i,j}=xi+j ai,j=xi+j ,可以发现对于 j j j 相等的某一列,这一列中所有数模 x x x 的结果相等
而对于前 x x x 列模 x x x 的结果构成了 x x x 的完全剩余系,因此有 φ ( x ) \varphi(x) φ(x) 列与 x x x 互质
对于这些列中的每一列,前 y y y 行模 y y y 的结果也构成了 y y y 的完全剩余系,因此每一列都有 φ ( y ) \varphi(y) φ(y) 个数与 y y y 互质
所以与 x y xy xy 互质的数有 φ ( x ) φ ( y ) \varphi(x)\varphi(y) φ(x)φ(y) 个,即 φ ( x y ) = φ ( x ) φ ( y ) \varphi(xy)=\varphi(x)\varphi(y) φ(xy)=φ(x)φ(y) - 对于任意
n
n
n 的唯一分解形式
n
=
∏
i
=
1
k
p
i
a
i
n=\prod\limits_{i=1}^{k}p_i^{a_i}
n=i=1∏kpiai ,有
φ
(
n
)
=
n
∏
i
=
1
k
p
i
−
1
p
i
\varphi(n)=n \prod\limits_{i=1}^{k} \frac{p_i-1}{p_i}
φ(n)=ni=1∏kpipi−1
证明
对于任意质数 p p p 和非负整数 k k k,都有 φ ( p k ) = p k p − 1 p \varphi(p^k)=p^k\dfrac{p-1}{p} φ(pk)=pkpp−1
任意不相等的质数 p p p 和 q q q,和任意非负整数 x x x 和 y y y ,都有 ( p x , q y ) = 1 (p^x,q^y)=1 (px,qy)=1
因此 φ ( p x q y ) = φ ( p x ) φ ( q y ) \varphi(p^xq^y)=\varphi(p^x)\varphi(q^y) φ(pxqy)=φ(px)φ(qy) -
n
=
∑
d
∣
n
φ
(
d
)
n=\sum\limits_{d \mid n}\varphi(d)
n=d∣n∑φ(d)
证明
首先可以得到 n = ∑ i = 1 n ∑ d = 1 n [ ( n , i ) = d ] n=\sum\limits_{i=1}^{n}\sum\limits_{d=1}^{n}[(n,i)=d] n=i=1∑nd=1∑n[(n,i)=d]
可以发现当 ( n , i ) = d (n,i)=d (n,i)=d 时 d ∣ n d \mid n d∣n,因此上式可改为 n = ∑ i = 1 n ∑ d ∣ n [ ( n , i ) = d ] n=\sum\limits_{i=1}^{n}\sum\limits_{d \mid n}[(n,i)=d] n=i=1∑nd∣n∑[(n,i)=d]
交换求和顺序后发现 ∑ i = 1 n [ ( n , i ) = d ] \sum\limits_{i=1}^{n}[(n,i)=d] i=1∑n[(n,i)=d],即满足 ( n , i ) = d (n,i)=d (n,i)=d 的 i i i 的个数
若 ( n , i ) = d (n,i)=d (n,i)=d ,可以得到 ( n d , i d ) = 1 (\frac{n}{d},\frac{i}{d})=1 (dn,di)=1,即上式为与 n d \frac{n}{d} dn 互质的 i d \frac{i}{d} di 的个数,也就是 φ ( n d ) \varphi(\frac{n}{d}) φ(dn)
注意到 n d \frac{n}{d} dn 与 d d d 具有对称性,即 ∑ d ∣ n φ ( n d ) = ∑ d ∣ n φ ( d ) \sum\limits_{d \mid n}\varphi(\frac{n}{d})=\sum\limits_{d \mid n}\varphi(d) d∣n∑φ(dn)=d∣n∑φ(d) -
∀
n
>
2
\forall n > 2
∀n>2,所有小于
n
n
n 且与
n
n
n 互质的数的和为
n
φ
(
n
)
2
\dfrac{n\varphi(n)}{2}
2nφ(n)
证明
引理1: ( n , i ) = ( n , n − i ) (n,i)=(n,n-i) (n,i)=(n,n−i)
引理2: ∀ n > 3 \forall n > 3 ∀n>3, φ ( n ) \varphi(n) φ(n) 为偶数
由引理1可得,与小于 n n n 且与 n n n 互质的数总是成对出现,即 i i i 与 n − i n-i n−i,且每一对的和都为 n n n,再由引理2可得不存在 n − i = i n-i=i n−i=i,得证
反向证明: 容斥原理
对于一个值的欧拉函数,分解质因数后用公式求解即可
线性筛求解欧拉函数
由于欧拉函数是积性函数,因此可以用线性筛快速求解前
n
n
n 项
设
p
p
p为任意质数,当
n
m
o
d
p
≠
0
n \mod p \ne 0
nmodp=0时
φ
(
n
p
)
=
φ
(
n
)
p
\varphi(np)=\varphi(n)p
φ(np)=φ(n)p,当
n
m
o
d
p
=
0
n \mod p = 0
nmodp=0 时,
φ
(
n
p
)
=
φ
(
n
)
φ
(
p
)
\varphi(np)=\varphi(n)\varphi(p)
φ(np)=φ(n)φ(p)
欧拉定理
若
(
a
,
p
)
=
1
(a,p)=1
(a,p)=1 ,则有
a
φ
(
p
)
≡
1
(
m
o
d
p
)
a^{\varphi(p)} \equiv 1 \pmod{p}
aφ(p)≡1(modp)
证明
由
φ
\varphi
φ 的定义可得,与
p
p
p 互质的数有
φ
(
p
)
\varphi(p)
φ(p) 个,则分别选取这些数,记为
r
1
…
r
φ
(
p
)
r_1 \dots r_{\varphi(p)}
r1…rφ(p),易得这些数都小于
p
p
p 且不相等
将这些数分别乘
a
a
a 得到
a
r
1
…
a
r
φ
(
p
)
ar_1\dots ar_{\varphi(p)}
ar1…arφ(p),易得这些数也都与
p
p
p 互质且不相等,因此这些数模
p
p
p 之后也都与
p
p
p 互质且不想等
可以得到
∏
i
=
1
φ
(
p
)
a
r
i
=
a
φ
(
p
)
∏
i
=
1
φ
(
p
)
r
i
≡
∏
i
=
1
φ
(
p
)
r
i
(
m
o
d
p
)
\prod\limits_{i=1}^{\varphi(p)}ar_i=a^{\varphi(p)}\prod\limits_{i=1}^{\varphi(p)}r_i \equiv \prod\limits_{i=1}^{\varphi(p)}r_i \pmod{p}
i=1∏φ(p)ari=aφ(p)i=1∏φ(p)ri≡i=1∏φ(p)ri(modp)
等式两边约去求积后得到
a
φ
(
p
)
≡
1
(
m
o
d
p
)
a^{\varphi(p)} \equiv 1 \pmod{p}
aφ(p)≡1(modp)
扩展欧拉定理
a
n
≡
{
a
n
,
n
<
φ
(
p
)
a
(
n
m
o
d
φ
(
p
)
)
+
φ
(
p
)
,
n
≥
φ
(
p
)
(
m
o
d
p
)
a^n \equiv
证明
首先证明
a
∈
P
a \in \mathbb{P}
a∈P 时上式成立
当
(
a
,
p
)
=
1
(a,p)=1
(a,p)=1 时由欧拉定理可得成立
当
(
a
,
p
)
≠
1
(a,p) \ne 1
(a,p)=1 时,因为
a
a
a 为质数,所以有
a
∣
p
a \mid p
a∣p,令
p
=
a
r
p
′
p=a^rp^\prime
p=arp′
因为
(
a
,
p
′
)
=
1
(a,p^\prime)=1
(a,p′)=1,所以有
a
φ
(
p
′
)
≡
1
(
m
o
d
p
′
)
a^{\varphi(p^\prime)} \equiv 1 \pmod{p^\prime}
aφ(p′)≡1(modp′)
同时,由互质可得
φ
(
a
r
p
′
)
=
φ
(
a
r
)
φ
(
p
′
)
\varphi(a^{r}p^\prime)=\varphi(a^r)\varphi(p^\prime)
φ(arp′)=φ(ar)φ(p′),因此有
a
φ
(
a
r
)
φ
(
p
′
)
=
a
φ
(
p
)
≡
1
(
m
o
d
p
′
)
a^{\varphi(a^r)\varphi(p^\prime)}=a^{\varphi(p)} \equiv 1 \pmod{p^\prime}
aφ(ar)φ(p′)=aφ(p)≡1(modp′)
由同余的性质可得到
a
r
+
φ
(
p
)
≡
a
r
(
m
o
d
p
)
a^{r+\varphi(p)} \equiv a^r \pmod{p}
ar+φ(p)≡ar(modp)
即
r
r
r 为
a
a
a 在模
p
p
p 下求幂时进入循环之前的长度
又因
n
≥
φ
(
p
)
≥
r
n \ge \varphi(p) \ge r
n≥φ(p)≥r,所以有
a
n
=
a
n
−
r
a
r
≡
a
n
−
r
a
r
+
φ
(
p
)
≡
a
n
+
φ
(
p
)
(
m
o
d
p
)
a^n=a^{n-r}a^{r} \equiv a^{n-r}a^{r+\varphi(p)} \equiv a^{n + \varphi(p)} \pmod{p}
an=an−rar≡an−rar+φ(p)≡an+φ(p)(modp)
只要保证指数
n
′
n^\prime
n′ 满足
n
′
≥
φ
(
p
)
n^\prime \ge \varphi(p)
n′≥φ(p) 且
n
′
≡
n
(
m
o
d
φ
(
p
)
)
n^\prime \equiv n \pmod{\varphi(p)}
n′≡n(modφ(p)),就有
a
n
′
≡
a
n
(
m
o
d
p
)
a^{n^\prime} \equiv a^n \pmod{p}
an′≡an(modp),则此时满足条件的
n
′
n^\prime
n′ 最小为
(
n
m
o
d
φ
(
p
)
)
+
φ
(
p
)
(n \mod \varphi(p)) + \varphi(p)
(nmodφ(p))+φ(p)
即,对任意质数
q
q
q,都有
q
n
≡
q
(
n
m
o
d
φ
(
p
)
)
+
φ
(
p
)
(
m
o
d
p
)
q^n \equiv q^{(n \mod \varphi(p))+\varphi(p)} \pmod{p}
qn≡q(nmodφ(p))+φ(p)(modp)
则对任意非负整数
k
k
k 都有
(
q
k
)
n
=
(
q
n
)
k
≡
(
q
(
n
m
o
d
φ
(
p
)
)
+
φ
(
p
)
)
k
=
(
q
k
)
(
n
m
o
d
φ
(
p
)
)
+
φ
(
p
)
(
m
o
d
p
)
(q^k)^n = (q^n)^k \equiv (q^{(n \mod \varphi(p))+\varphi(p)})^k=(q^k)^{(n \mod \varphi(p))+\varphi(p)} \pmod{p}
(qk)n=(qn)k≡(q(nmodφ(p))+φ(p))k=(qk)(nmodφ(p))+φ(p)(modp)
此时,对任意非负整数
a
a
a,假设其唯一分解形式为
∏
i
=
1
k
q
i
r
i
\prod\limits_{i=1}^{k}q_i^{r_i}
i=1∏kqiri
可以得到
a
n
=
∏
i
=
1
k
q
i
r
i
n
≡
∏
i
=
1
k
q
r
i
(
(
n
m
o
d
φ
(
p
)
)
+
φ
(
p
)
)
=
a
(
n
m
o
d
φ
(
p
)
)
+
φ
(
p
)
(
m
o
d
p
)
a^n=\prod\limits_{i=1}^{k}q_i^{r_in} \equiv \prod\limits_{i=1}^{k}q^{r_i((n \mod \varphi(p))+\varphi(p))}=a^{(n \mod \varphi(p))+\varphi(p)} \pmod{p}
an=i=1∏kqirin≡i=1∏kqri((nmodφ(p))+φ(p))=a(nmodφ(p))+φ(p)(modp)
P1405 苦恼的小明
费马小定理
对任意质数
p
p
p ,若
(
a
,
p
)
=
1
(a,p)=1
(a,p)=1,则有
a
p
−
1
≡
1
(
m
o
d
p
)
a^{p-1} \equiv 1 \pmod{p}
ap−1≡1(modp)
用欧拉定理/费马小定理求逆元
素性测试
费马素性测试: 利用费马小定理的逆定理随机测试
费马素性测试可能测不出的非质数
伪素数: 若存在
a
a
a 使得
a
p
−
1
≡
1
(
m
o
d
p
)
a^{p-1} \equiv 1 \pmod{p}
ap−1≡1(modp) 成立,则称
p
p
p 为以
a
a
a 为基底的伪素数
最小的伪素数是
341
=
11
×
31
341=11 \times 31
341=11×31,此时有
2
340
≡
1
(
m
o
d
341
)
2^{340} \equiv 1 \pmod{341}
2340≡1(mod341)
费马素性测试一定测不出的非质数
卡迈克尔(Carmichael)数: 对于非质数
p
p
p,若对任意满足
(
a
.
p
)
=
1
(a.p)=1
(a.p)=1 的
a
a
a 都有
a
p
−
1
≡
1
(
m
o
d
p
)
a^{p-1} \equiv 1 \pmod{p}
ap−1≡1(modp)
Carmichael数至少有三个质因子且每个质因子只有一个
米勒拉宾(Miller–Rabin)素性测试
二次探测定理
若
p
p
p 为质数,则满足
x
2
≡
1
(
m
o
d
p
)
x^2 \equiv 1 \pmod{p}
x2≡1(modp) 的
x
x
x 只有
1
1
1 或
p
−
1
p-1
p−1,这样的
x
x
x 称为模
p
p
p 下的平凡根
证明
x
2
≡
1
(
m
o
d
p
)
⟹
(
x
+
1
)
(
x
−
1
)
≡
0
(
m
o
d
p
)
⟹
p
∣
(
x
+
1
)
(
x
−
1
)
x^2 \equiv 1 \pmod{p} \implies (x+1)(x-1) \equiv 0 \pmod{p} \implies p \mid (x+1)(x-1)
x2≡1(modp)⟹(x+1)(x−1)≡0(modp)⟹p∣(x+1)(x−1)
因为
p
p
p 是质数,所以只能得到
p
∣
(
x
+
1
)
p \mid (x+1)
p∣(x+1) 或
p
∣
(
x
−
1
)
p \mid (x-1)
p∣(x−1)
p
∣
(
x
+
1
)
p \mid (x+1)
p∣(x+1) 时
x
=
p
−
1
x = p-1
x=p−1
p
∣
(
x
−
1
)
p \mid (x-1)
p∣(x−1) 时
x
=
1
x = 1
x=1
逆否定理:
若对于
x
2
≡
1
(
m
o
d
p
)
x^2 \equiv 1 \pmod{p}
x2≡1(modp) 存在非平凡根,则
p
p
p 一定不是质数
过程
若
p
=
2
p=2
p=2 则判断是素数
否则随机在
[
2
,
p
−
1
]
[2,p-1]
[2,p−1] 范围内选取
a
a
a,并进行下述测试:
首先令
p
−
1
=
2
r
p
1
p-1=2^rp_1
p−1=2rp1 且
2
∤
p
1
2 \nmid p_1
2∤p1,则有
a
n
−
1
=
(
a
p
1
)
2
r
a^{n-1} = (a^{p_1})^{2^r}
an−1=(ap1)2r
于是首先计算出
b
≡
a
p
1
(
m
o
d
p
)
b \equiv a^{p_1} \pmod{p}
b≡ap1(modp),然后对
b
b
b 进行最多
r
r
r 次平方操作
若在平方的过程中发现非平凡根则一定不是质数
若在平方的过程中出现
b
=
p
−
1
b=p-1
b=p−1,则这个
b
b
b 为平凡根,可以结束平方过程
若成功结束平方,则用费马测试进行判断
错误率
每次测试会使错误率变为原来的
1
4
\dfrac{1}{4}
41,所以若进行
n
n
n 次测试则错误率为
1
4
n
\dfrac{1}{4^n}
4n1
a
a
a 的选取
对于 unsigned int
范围内的整数,可以使用
{
2
,
7
,
61
}
\{2,7,61\}
{2,7,61} 三个数作为
a
a
a 进行测试就可以确定素性
对于 unsigned long long
范围内的整数,可以使用
{
2
,
325
,
9375
,
28178
,
450775
,
9780504
,
1795265022
}
\{2,325,9375,28178,450775,9780504,1795265022\}
{2,325,9375,28178,450775,9780504,1795265022} 进行最多7次测试就可以确定素性
也可以使用
{
2
,
3
,
5
,
7
,
11
,
13
,
17
,
19
,
23
,
29
,
31
,
37
}
\{2,3,5,7,11,13,17,19,23,29,31,37\}
{2,3,5,7,11,13,17,19,23,29,31,37} (前12个质数)进行测试,但此时需要对每个数都进行测试,不能只选择小于
n
n
n 的
卢卡斯定理
当
p
=
P
p=\mathbb{P}
p=P 时有
C
n
m
≡
C
⌊
n
/
p
⌋
⌊
m
/
p
⌋
C
n
m
o
d
p
m
m
o
d
p
(
m
o
d
p
)
C_{n}^{m}\equiv C_{\lfloor n/p \rfloor}^{\lfloor m/p \rfloor}C_{n \mod p}^{m \mod p}\pmod{p}
Cnm≡C⌊n/p⌋⌊m/p⌋Cnmodpmmodp(modp)
证明
设
n
=
k
p
+
c
n=kp+c
n=kp+c,
m
=
i
p
+
j
m=ip+j
m=ip+j,则有
KaTeX parse error: No such environment: flalign at position 8: \begin{̲f̲l̲a̲l̲i̲g̲n̲}̲ (1+x)^n & = (…
其中
(
1
+
x
)
p
=
∑
i
=
0
p
C
p
i
x
i
(1+x)^p=\sum\limits_{i=0}^{p}C_{p}^{i}x^i
(1+x)p=i=0∑pCpixi,注意到
C
p
i
=
p
!
i
!
(
p
−
i
)
!
C_{p}^{i}=\dfrac{p!}{i!(p-i)!}
Cpi=i!(p−i)!p! 中只有
i
=
0
i=0
i=0 或
i
=
p
i=p
i=p 时不包含因子
p
p
p,因此只有当
i
=
0
i=0
i=0 或
p
p
p 时
C
p
i
m
o
d
p
≠
0
C_{p}^{i} \mod{p} \ne 0
Cpimodp=0
因此
(
1
+
x
)
p
=
∑
i
=
0
p
C
p
i
x
i
≡
C
p
0
x
0
+
C
p
p
x
p
=
(
1
+
x
p
)
(
m
o
d
p
)
(1+x)^p=\sum\limits_{i=0}^{p}C_{p}^{i}x^i \equiv C_{p}^{0}x^0+C_{p}^{p}x^p=(1+x^p) \pmod{p}
(1+x)p=i=0∑pCpixi≡Cp0x0+Cppxp=(1+xp)(modp)
于是上式转化为
KaTeX parse error: No such environment: flalign at position 8: \begin{̲f̲l̲a̲l̲i̲g̲n̲}̲ ((1+x)^p)^k(1+…
即
∑
i
=
0
k
∑
j
=
0
c
C
k
i
C
c
j
x
i
p
+
j
≡
∑
m
=
0
k
p
+
c
C
k
p
+
c
m
x
m
(
m
o
d
p
)
\sum\limits_{i=0}^{k}\sum\limits_{j=0}^{c}C_{k}^{i}C_{c}^{j}x^{ip+j} \equiv \sum\limits_{m=0}^{kp+c}C_{kp+c}^{m}x^m \pmod{p}
i=0∑kj=0∑cCkiCcjxip+j≡m=0∑kp+cCkp+cmxm(modp)
其中同余号左右的项一一对应,于是对于第
m
=
i
p
+
j
m=ip+j
m=ip+j 项,有
C
k
i
C
c
j
x
i
p
+
j
≡
C
k
p
+
c
m
x
m
(
m
o
d
p
)
C_{k}^{i}C_{c}^{j}x^{ip+j} \equiv C_{kp+c}^{m}x^m \pmod{p}
CkiCcjxip+j≡Ckp+cmxm(modp),约去
x
m
x^m
xm 后得到
C
k
i
C
c
j
≡
C
k
p
+
c
i
p
+
j
(
m
o
d
p
)
C_{k}^{i}C_{c}^{j} \equiv C_{kp+c}^{ip+j} \pmod{p}
CkiCcj≡Ckp+cip+j(modp)
P3807 【模板】卢卡斯定理/Lucas 定理
矩阵
矩阵(Matrix) 是一个二维数组
[
1
2
1
2
1
2
1
2
1
]
\left[ \right]
121212121
矩阵来源于线性方程组:
{
5
x
1
+
3
x
2
+
2
x
3
=
y
1
4
x
1
−
6
x
2
+
3
x
3
=
y
2
7
x
1
+
9
x
2
−
8
x
3
=
y
3
\left\{ \right.
⎩
⎨
⎧5x1+3x2+2x3=y14x1−6x2+3x3=y27x1+9x2−8x3=y3
将该方程组系数提出,即为
[
5
3
2
4
−
6
3
7
9
−
8
]
\left[ \right]
5473−6923−8
将系数矩阵与自变量矩阵(向量)相乘得到因变量矩阵
$$
\left[
\right]
\left[
\right]
\left[
\right]
$$
就是线性方程组的矩阵表示形式
一般用 a i , j a_{i,j} ai,j 表示某矩阵第 i i i 行第 j j j 列的元素,比如 a 3 , 2 a_{3,2} a3,2 表示第三行第二列的元素
方阵: 方形矩阵
n
n
n 阶方阵
矩阵运算
加法
数乘
乘法
转置
矩阵快速幂
线性组合
形如 x = ∑ i = 1 n a i x i x=\sum\limits_{i=1}^{n}a_ix_i x=i=1∑naixi的形式称为 x 1 … x n x_1 \dots x_n x1…xn 的线性组合,可以写为两个向量相乘的形式 x = [ a 1 , … , a n ] [ x 1 , … , x n ] T x=[a_1, \dots, a_n][x_1, \dots, x_n]^T x=[a1,…,an][x1,…,xn]T
矩阵加速线性递推
斐波那契数列
f
(
x
)
=
f
(
x
−
1
)
+
f
(
x
−
2
)
f(x)=f(x-1)+f(x-2)
f(x)=f(x−1)+f(x−2)
f
(
x
)
=
2
(
f
(
x
−
1
)
+
f
(
x
−
2
)
+
1
)
f(x)=2(f(x-1)+f(x-2)+1)
f(x)=2(f(x−1)+f(x−2)+1)?
f
(
x
)
=
f
(
x
−
1
)
+
f
(
x
−
2
)
+
x
f(x)=f(x-1)+f(x-2)+x
f(x)=f(x−1)+f(x−2)+x?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具