跳到主要内容

数论

数论的核心是整除、互素、同余。

整除:aa 可以整除 b ab\Leftrightarrow a\mid bbmoda=0b\bmod a=0。(正负都可)

性质(以下都是整数):

  • 传递性:ab,bcaca\mid b,b\mid c\Rightarrow a\mid c

  • 线性组合:ab,aca(mb+nc)a\mid b,a\mid c\Rightarrow a\mid(mb+nc)

  • 写成等式: abka=b.a\mid b \Leftrightarrow ka=b.

互素:gcd(a,b)=1ab\gcd(a,b)=1\Leftrightarrow a\perp b,即 a,ba,b 互素。重要性质:

  • xab,xbxax\mid ab,x\perp b\Rightarrow x\mid a

同余:amodn=bmodna\bmod n=b\bmod n,也可以写成 ab(modn)a\equiv b\pmod n

  • ab(modn)n(ab)a\equiv b\pmod n\Leftrightarrow n\mid(a-b)
  • 注意:0modm=m0\bmod m=m
  • 写成等式: amodb=da=ka+da\bmod b=d\Leftrightarrow a=ka+d

剩余系: 完全模 mm 剩余系是指:$$

最大公因数 GCD

gcd(a,b)\gcd(a,b) 表示 a,ba,b 的最大公因数。

gcd\gcd 可以用 std::__gcd()。如果要自己搓,常用欧几里得算法,又叫辗转相除法,即 gcd(a,b)=gcd(b,amodb)\gcd(a,b)=\gcd(b,a\mod b)

int gcd(int a, int b) {
return b ? gcd(b, a % b) : a;
}

gcd\gcd 的性质:

  • 结合律:gcd(gcd(a,b),c)=gcd(a,gcd(b,c))=gcd(a,b,c)\gcd(\gcd(a,b),c)=\gcd(a,\gcd(b,c))=\gcd(a,b,c)。交换律当然也有。

  • gcd(ma,mb)=mgcd(a,b)\gcd(ma,mb)=m\gcd(a,b)

  • agcd(a,b)bgcd(a,b).\cfrac{a}{\gcd(a,b)}\perp\cfrac{b}{\gcd(a,b)}.

裴蜀定理

裴蜀定理:对于已知的整数 a,ba,b,存在整数 x,yx,y 使得 ax+by=gcd(a,b)ax+by=\gcd(a,b)

推论:

  • aba\perp b 当且仅当 ax+by=1.ax+by=1.

  • ax+by=dax+by=d 有解(a,ba,b 已知),当且仅当 d=kgcd(a,b).d=k\gcd(a,b).(二元线性丢番图方程)

裴蜀定理很好证明:

  • 对任意 x,yx,yxa+by=dxa+by=d,则 d=kgcd(a,b)d=k\gcd(a,b)kk 是整数。

  • 为什么?因为 gcd(a,b)(xr1+yr2)=d\gcd(a,b)(xr_1+yr_2)=d容易看出:最小的 ddgcd(a,b)\gcd(a,b),当且仅当 xr1+yr2=1xr_1+yr_2=1。(这里 r1,r2r_1,r_2 是互素的。)

裴蜀定理主要用于解决形如 ax+by=dax+by=d 这样的线性组合问题。

同余式

如果 ab(modm)a\equiv b\pmod ma,b,c,da,b,c,d 都是整数,则有:

  • a±cb±d(modm).a\pm c\equiv b\pm d\pmod m.

  • acbd(modm).ac\equiv bd \pmod m.

  • akbk(modm)a^k\equiv b^k\pmod m,注意 kk 是正整数。

  • 不保证 acbc(modm)\cfrac{a}{c}\equiv\cfrac{b}{c}\pmod m 成立。

单位元、逆元

单位元: 对于一种二元运算 f(a,b)f(a,b),定义域为 SS,如果 aS\forall a\in Sf(a,e)=af(a,e)=a,则称 ee 为这种二元运算 ff 的单位元。

更准确地说,f(a,b)f(a,b) 不一定满足交换律,即 f(a,b)=f(b,a)f(a,b)=f(b,a) 不一定成立。所以逆元分为两种:左单位元 f(e1,a)=af(e_1,a)=a、右单位元 f(a,e2)=af(a,e_2)=a

逆元: 如果 f(a,b)=af(a,b)=a,则 a,ba,b 互为逆元。

算数基本定理

任何 >1\gt1 的正整数都有且仅有一个有限个素数的乘积(即素数分解):n=p1c1×p2c2××pmcmn=p_1^{c_1}\times p_2^{c_2}\times\dots\times p_m^{c_m}

数论函数(算术函数)

指定义域是 N+\mathbb{N}_+ 的函数。

积性函数

积性函数是数论函数。如果对于所有互素的正整数 a,ba,b,函数 f(ab)=f(a)f(b)f(ab)=f(a)f(b),就称 f(x)f(x)积性函数

如果对于不互素的正整数 a,ba,b 也能成立,就称为完全积性函数

性质:

  • f(1)=1f(1)=1

常用积性函数:

  • 单位函数:id(n)=n.\text{id}(n)=n.

  • 幂函数:Ik(n)=nk.I_k(n)=n^k.(就是说 (mn)k=mknk(mn)^k=m^kn^k

  • 因数和函数:σ(n)=dnd.\sigma(n)=\sum_{d\mid n}d.

  • 因数个数:d(n)=dn1.d(n)=\sum_{d\mid n}1.

欧拉函数

欧拉函数记作:ϕ(x)\phi(x)。手写:φ(x)\varphi(x)。利用欧拉函数可以推导出欧拉定理(比较重要)。

ϕ(n)\phi(n) 定义为:不超过 nn 的、与 nn 互素的正整数个数

ϕ(n)=i=1n[in]\phi(n)=\sum_{i=1}^n[i\perp n]

注意:这里 [ ][\space] 是计数的意思,括号内的式子成立取 11,反之取 00

欧拉函数的几个定理(我不会证):

  • 欧拉函数是积性函数。

  • nn 为正整数,则 n=dnϕ(d).n=\sum_{d|n}\phi(d).

  • 求欧拉函数:假设 nn 可以分解为 kk 个素数的乘积,即

n=p1c1×p2c2×pkck,ϕ(n)=n(11p1)(11p2)(11pk)=ni=1k(11pi).n=p_1^{c_1}\times p_2^{c_2}\times\dots p_k^{c_k},\\ \Rightarrow \phi(n)=n(1-\frac{1}{p_1})(1-\frac{1}{p_2})\dots(1-\frac{1}{p_k})=n\prod_{i=1}^k(1-\frac{1}{p_i}).

整除分块 / 数论分块

整除分块用于解决这个问题:求 i=1nni\sum_{i=1}^n\lfloor\frac{n}{i}\rfloor