跳到主要内容

数论

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

整除:aa 可以整除 b ⇔a∣b\Leftrightarrow a\mid b 即 b mod a=0b\bmod a=0。(正负都可)

性质(以下都是整数):

  • 传递性:a∣b,b∣c⇒a∣ca\mid b,b\mid c\Rightarrow a\mid c。

  • 线性组合:a∣b,a∣c⇒a∣(mb+nc)a\mid b,a\mid c\Rightarrow a\mid(mb+nc)。

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

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

  • x∣ab,x⊥b⇒x∣ax\mid ab,x\perp b\Rightarrow x\mid a。

同余:a mod n=b mod na\bmod n=b\bmod n,也可以写成 a≡b(modn)a\equiv b\pmod n。

  • a≡b(modn)⇔n∣(a−b)a\equiv b\pmod n\Leftrightarrow n\mid(a-b)。
  • 注意:0 mod m=m0\bmod m=m。
  • 写成等式: a mod b=d⇔a=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,amod  b)\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)。

推论:

  • a⊥ba\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,y,xa+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。容易看出:最小的 dd 是 gcd⁡(a,b)\gcd(a,b),当且仅当 xr1+yr2=1xr_1+yr_2=1。(这里 r1,r2r_1,r_2 是互素的。)

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

同余式​

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

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

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

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

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

单位元、逆元​

单位元: 对于一种二元运算 f(a,b)f(a,b),定义域为 SS,如果 ∀a∈S\forall a\in S,f(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)=∑d∣nd.\sigma(n)=\sum_{d\mid n}d.

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

欧拉函数​

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

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

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

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

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

  • 欧拉函数是积性函数。

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

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

n=p1c1×p2c2×…pkck,⇒ϕ(n)=n(1−1p1)(1−1p2)…(1−1pk)=n∏i=1k(1−1pi).\begin{aligned} 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}). \end{aligned}

整除分块 / 数论分块​

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