数论篇
一、基本工作:了解数论
数论是一种数学分支,英文 number theory,主要研究整数的性质。
二、整数除法
在数论中,整数除法的结果通常为:商和余数。用数学公式表达即为
a=bq+r (0≤r<b) ,其中
q为商,
r 为余数。
取余运算同样是在做除法时求得的余数,不过它允许结果的符号与被除数相同。
取模运算的结果是在进行完整数除法后得到的余数。因计算机中数据绝大多数时候进行的是取模运算,所以我们后面一律用“取模运算”来表述。
我们通常把取模运算记作
amodb=r
三、一些基本的公式
设
amodb=r 则有:
取商:
q=⌊ba⌋
被除数逆运算(商乘除数加余数):
a=⌊ba⌋b+(amodb)
特别地,在MO(数学奥赛)中有高斯取整函数:
[x]
如果
a 能够整除
b ,即
amodb=0 ,我们将其记作
b∣a 。其中称
a 是
b 的倍数,
b 是
a 的因数(约数)。
由此基础,我们可以发现:
- b∣a 等价于存在整数 k 使得 a=kb
- 若 a∣b,c∣d ,则 ac∣bd
- 自反性: a∣a
- 反对称性:若 a∣b,b∣a ,则 a=b
- 传递性:若 a∣b,b∣c ,则 a∣c
- 线性法:若 a∣b,a∣c ,则 a∣(mb+nc)
- 消去律:若 ma∣mb ,则 a∣b
特别地, 1 是所有整数的约数, 0 是所有整数的倍数。
四、最大公因数和最小公倍数
最大公因数:亦称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。
a,b 的最大公约数记为
(a,b) 。
最小公倍数:两个或多个整数公有的倍数叫做它们的公倍数,其中除 0 以外最小的一个公倍数就叫做这几个整数的最小公倍。整数
a,b 的最小公倍数记为
[a,b]
我们为了方便进行使用,在计算中使用
gcd(a,b) 代表
a,b 的最大公因数;同时,以
lcm(a,b) 代表
a,b 的最小公倍数。
特别地,
gcd(a,b)×lcm(a,b)=a×b
五、一些定理和公式
- 辗转相减法:当 a≥b 时, gcd(a,b)=gcd(b,a−b)
- 辗转相除法:当 gcd(a,b)=gcd(b,amodb)
- 更相减损术(求高精度 a,b 的最大公因数):
分三种情况:
一、若
a,b 均为偶数,则
gcd(a,b)=2gcd(2a,2b)
二、若
a,b 一个是奇数,一个是偶数(假使
a 为奇数),则
gcd(a,b)=gcd(2a,b)
三、若
a,b 均为奇数,则
gcd(a,b)=gcd(b,a−b)
n=i=1∏+∞piei
其中
pi 是第
i 个素数,
ei 是非负整数。
调和级数
Hn 被定义为正整数的倒数和,即:
Hn=1+21+31+⋯+n1=i=1∑ni1
求正整数的倒数平方和,即:
i=1∑+∞i21
结果是
6π2
要得到自然数
n 以内的全部素数,必须把不大于
n 的所有素数的倍数剔除,剩下的就是素数
让每个合数只被其最小因子标记为非素数。
具体地,对
i=2,3,5,…,n 从小到大枚举目前筛出来的所有素数
pj ,将
i×pj 标记为合数,当
imodpj=v 时,
i 中已经有了
pj 这个因子,而之后的
pj+1,pj+2 都大于
pj ,所以这个时候退出循环。
a+b≡(amodp)+(bmodp)(modp)
a−b≡(amodp)−(bmodp)(modp)
a×b≡(amodp)×(bmodp)(modp)
当底数
a 和模数
p 都确定时,令
B=⌈p⌉ ,则有:
ab≡(aB)⌊Bb⌋×abmodB(modp)
可以做到
O(n) 预处理,
O(1) 查询
abmodp
乘法逆元的存在是为了在模意义下进行除法运算。
具体而言,对于模数
p ,我们希望对
a 找到一个数
x ,满足:
a×x≡1(modp)
此时
x 是
a 在模
p 意义下的乘法逆元,记为
a−1=x
但是这个数不一定存在,如
a=0 的时候就一定不存在。而在模数
p 是素数的情况下,对于
a=1,2,…,p−1 ,对应的乘法逆元
a−1 都是存在的。
对于素数
p 和
a=1,2,…,p−1 ,有:
ap−1≡1(modp)
换言之:
a×ap−2≡1(modp)
即
ap−2modp 是
a 的乘法逆元。
对于素数
p 和
i=2,3…,p−1 ,有:
i−1≡−⌊ip⌋(pmodi)−1(modp)
给大素数
p 和
n 个数
a1,a2,…,an ,记
A=i=1∏nai ,求出
A−1modp ,之后就有:
ai−1≡A−1(j=1∏i−1aj)(j=i+1∏naj)(modp)
后面两个括号内的内容可以前后缀积处理。
对于一个整数
n ,它除以
1∼n 之间的数后的商,只有不超过
2n 种,且每种商对应的除数是一段连续区间。
对于除数
x≤n ,对应的
⌊xn⌋ 最多有
n 个。
对于除数
x>n ,则有
⌊xn⌋≤xn<n
同时
⌊xn⌋
的值是非严格单调的,所以相同的
⌊xn⌋ 对应的除数
x 是连续的。
如果我们知道了
⌊xn⌋=y 的除数
x 区间左端点
l ,则可以直接计算出右端点
r :
r=⌊⌊ln⌋n⌋
通过一个简单的循环,可以在
O(n) 的时间复杂度内得到所有的的
⌊xn⌋ 值和对应的区间,即整除分块。
目的:寻找整系数方程(组)的整数解
线性丢番图方程的标准形式为
ax+by=c ,其中
a,b,c 为整数,
x,y 为未知数。
裴蜀定理指出,对于线性丢番图方程
ax+by=c ,存在解的充要条件为
gcd(a,b)∣c
在模
g=gcd(a,b) 意义下看方程:
ax+by≡c(modg)
0×x+0×y≡c(modg)
c≡0(modg)
必要性得证。
充分性则由扩展欧几里得算法构造解给出。
构造线性丢番图方程
ax+by=gcd(a,b) 的整数解。
不妨考虑辗转相除法的递归或迭代过程:
ax+by=ay′+b(x′−⌊ba⌋y′)
系数对齐可以得到递归或迭代公式:
{x=y′y=x′−⌊ba⌋y′
而对于递归的边界
a=gcd(a,b),b=0 ,方程退化为:
gcd(a,b)x=gcd(a,b)
由此可得解
x=1,y=0
要求线性丢番图方程
ax+by=c 的特解,把
ax+by=gcd(a,b) 的
特解乘上
gcd(a,b)c
我们想要求解如下的线性同余方程组:
⎩⎨⎧x≡a1(modm1)x≡a2(modm2)⋮x≡an(modmn)
中国剩余定理指出,在
m1,m2,…,mn 两两互素的情况下的解:
x=kM+i=1∑naiMiti
M=i=1∏nmi,Mi=miM
ti=Mi−1modmi
扩展:假设有一个解
x0 ,则其通解为:
x≡x0+klcm(m1,m2)
实际上就是合并成为新的线性同余方程:
x≡x0(modlcm(m1,m2))
欧拉函数
ϕ(n) 定义为
1∼n 中与
n 互素的数的个数,即:
ϕ(n)=i=1∑n[gcd(n,i)=1]
简化式子可得:
ϕ(n)=ni=1∏k(1−pi1)
数论函数是指定义域为正整数的函数。
积性函数是指在
m,n 互素的情况下满足
f(nm)=f(n)f(m) 的数论
函数。
从单个欧拉函数的计算式可以看出,欧拉函数
ϕ(n) 是一个典型的积性函数。
此外典型的积性函数还有莫比乌斯函数
μ(n) 、约数个数函数
τ(n) 、
约束和函数
σ(n) 等。
从定义式可以看出,积性函数
f(n) 一定有
f(1)=1
欧拉定理指出,对于正整数
a,p ,若
gcd(a,p)=1 ,则:
aϕ(n)≡1(modp)
费马小定理是欧拉定理的特例。
扩展欧拉定理指出,对于正整数
a,b,p ,有:
ab=⎩⎨⎧ab b<ϕ(p) (modp)abmodϕ(p)+ϕ(p) b≥ϕ(p)
这可以在取模意义下帮我们有效控制指数的大小
Lucas 定理指出,对于非负整数
n,m 和素数
p ,有:
(nm)≡(⌊n/p⌋⌊m/p⌋)(nmodpmmodp)(modp)
遇到组合数模小素数,通常是利用 Lucas 定理递归展开实现。
威尔逊定理指出,大于
1 的整数
p 为素数的充要条件是:
(p−1)!≡−1(modp)
总结
从古到今,数学都是一个非常重要的学科。我们要努力学习,将前人精华予以传承。
依旧
向理想的银河迈进