数论的核心是整除、互素、同余。
整除:a 可以整除 b ⇔a∣b 即 bmoda=0。(正负都可)
性质(以下都是整数):
-
传递性:a∣b,b∣c⇒a∣c。
-
线性组合:a∣b,a∣c⇒a∣(mb+nc)。
-
写成等式: a∣b⇔ka=b.
互素:gcd(a,b)=1⇔a⊥b,即 a,b 互素。重要性质:
- x∣ab,x⊥b⇒x∣a。
同余:amodn=bmodn,也可以写成 a≡b(modn)。
- a≡b(modn)⇔n∣(a−b)。
- 注意:0modm=m。
- 写成等式: amodb=d⇔a=ka+d,
剩余系: 完全模 m 剩余系是指:$$
最大公因数 GCD
gcd(a,b) 表示 a,b 的最大公因数。
求 gcd 可以用 std::__gcd()
。如果要自己搓,常用欧几里得算法,又叫辗转相除法,即 gcd(a,b)=gcd(b,amodb)。
int gcd(int a, int b) {
return b ? gcd(b, a % b) : a;
}
gcd 的性质:
-
结合律:gcd(gcd(a,b),c)=gcd(a,gcd(b,c))=gcd(a,b,c)。交换律当然也有。
-
gcd(ma,mb)=mgcd(a,b)。
-
gcd(a,b)a⊥gcd(a,b)b.
裴蜀定理
裴蜀定理:对于已知的整数 a,b,存在整数 x,y 使得 ax+by=gcd(a,b)。
推论:
-
a⊥b 当且仅当 ax+by=1.
-
ax+by=d 有解(a,b 已知),当且仅当 d=kgcd(a,b).(二元线性丢番图方程)
裴蜀定理很好证明:
-
对任意 x,y,xa+by=d,则 d=kgcd(a,b),k 是整数。
-
为什么?因为 gcd(a,b)(xr1+yr2)=d。容易看出:最小的 d 是 gcd(a,b),当且仅当 xr1+yr2=1。(这里 r1,r2 是互素的。)
裴蜀定理主要用于解决形如 ax+by=d 这样的线性组合问题。
同余式
如果 a≡b(modm),a,b,c,d 都是整数,则有:
-
a±c≡b±d(modm).
-
ac≡bd(modm).
-
ak≡bk(modm),注意 k 是正整数。
-
不保证 ca≡cb(modm) 成立。
单位元、逆元
单位元: 对于一种二元运算 f(a,b),定义域为 S,如果 ∀a∈S,f(a,e)=a,则称 e 为这种二元运算 f 的单位元。
更准确地说,f(a,b) 不一定满足交换律,即 f(a,b)=f(b,a) 不一定成立。所以逆元分为两种:左单位元 f(e1,a)=a、右单位元 f(a,e2)=a。
逆元: 如果 f(a,b)=a,则 a,b 互为逆元。
算数基本定理
任何 >1 的正整数都有且仅有一个有限个素数的乘积(即素数分解):n=p1c1×p2c2×⋯×pmcm。
数论函数(算术函数)
指定义域是 N+ 的函数。
积性函数
积性函数是数论函数。如果对于所有互素的正整数 a,b,函数 f(ab)=f(a)f(b),就称 f(x) 为积性函数。
如果对于不互素的正整数 a,b 也能成立,就称为完全积性函数。
性质:
常用积性函数:
-
单位函数:id(n)=n.
-
幂函数:Ik(n)=nk.(就是说 (mn)k=mknk)
-
因数和函数:σ(n)=∑d∣nd.
-
因数个数:d(n)=∑d∣n1.
欧拉函数
欧拉函数记作:ϕ(x)。手写:φ(x)。利用欧拉函数可以推导出欧拉定理(比较重要)。
ϕ(n) 定义为:不超过 n 的、与 n 互素的正整数个数。
ϕ(n)=i=1∑n[i⊥n]
注意:这里 [ ] 是计数的意思,括号内的式子成立取 1,反之取 0。
欧拉函数的几个定理(我不会证):
n=p1c1×p2c2×…pkck,⇒ϕ(n)=n(1−p11)(1−p21)…(1−pk1)=ni=1∏k(1−pi1).
整除分块 / 数论分块
整除分块用于解决这个问题:求 ∑i=1n⌊in⌋。