【学习笔记】数学知识-约数
约数
- 若整数 \(n\) 除以整数 \(d\) 的余数为 \(0\) ,即 \(d\) 能整除 \(n\) ,则称 \(d\) 是 \(n\) 的约数, \(n\) 是 \(d\) 的倍数,记为 \(d|n\) 。若整数 \(n\) 除以整数 \(d\) 的余数不为 \(0\) ,即 \(d\) 不能整除 \(n\) ,则记为 \(d \nmid n\) 。
- 性质
- 若 \(n\) 为正整数,则 \(\sum\limits_{i=1}^{n}[i|n] \le 2\sqrt{n}\) 。
- 若 \(n\) 为正整数,则 \(\sum\limits_{i=1}^{n}\sum\limits_{d=1}^{i}[d|i] \approx n \times \log n\) 。
- \(\gcd(a,b)\) 表示 \(a\) 和 \(b\) 的最大公约数,同理可推广到 \(\gcd(a,b,c, \dots )\) 。
- \(\gcd(a,b)\) 在数学中用符号记作 \((a,b)\) 。
- 性质
- 特别地,若 \(a>0\) ,有 \(\gcd(a,0)=a\) 。
- 若 \(n,a,b\) 为正整数,且有 \(2 \le n,a<b \le n\) ,则 \(\max \{\gcd(a,b) \}= \left\lfloor\dfrac{n}{2}\right\rfloor\) 。
- 构造 \(a=\left\lfloor\dfrac{n}{2}\right\rfloor,b=2a=2\left\lfloor\dfrac{n}{2}\right\rfloor\) 即可。
- CF1370A Maximum GCD
- 若 \(n,m\) 均为正整数,则 \(\gcd(n!,m!)= \min(n,m)!\) 。
- \(\operatorname{lcm}(a,b)\) 表示 \(a\) 和 \(b\) 的最小公倍数,同理可推广到 \(\operatorname{lcm}(a,b,c, \dots )\) 。
- \(\operatorname{lcm}(a,b)\) 在数学中用符号记作 \([a,b]\) 。
- 性质
- 若 \(n,a,b\) 为正整数,且有 \(a,b \le n\) ,则 \(\max \{\operatorname{lcm} (a,b) \}=\begin{cases}1&n=1 \\ n(n-1)& n \ne 1\end{cases}\) 。
- 当 \(n \ne 1\) 时,构造 \(a=n,b=n-1\) 即可。
- luogu P5436 【XR-2】缘分
- 若 \(n,a,b\) 为正整数,且有 \(a,b \le n\) ,则 \(\max \{\operatorname{lcm} (a,b) \}=\begin{cases}1&n=1 \\ n(n-1)& n \ne 1\end{cases}\) 。
- 若 \(\forall a,b \in \mathbb{N}\) ,则 \(\gcd (a,b) \times \operatorname{lcm} (a,b)=a \times b\) 。
九章算术·更相减损法
- 若 \(\forall a,b \in \mathbb{N},a \le b\) ,则 \(\gcd (a,b)= \gcd (a,b-a)= \gcd (b,b-a)\) 。
- 证明:设 \(d= \gcd(a,b),k_1= \frac{a}{d},k_2= \frac{b}{d}\) ,移项得 \(a=k_1 d,b=k_2 d\) ,又因为 \(d|(b-a),b-a=(k_2-k_1)d\) ,故 \(\gcd(a,b-a)= \gcd(k_1 d,(k_2-k_1)d)=d\) ,\(b\) 与 \(b-a\) 同理。
- 若 \(\forall a,b,c \in \mathbb{N},a \le b \le c\) ,则 \(\gcd (a,b,c)= \gcd (a,b-a,c-b)\) 。
- 证明:设 \(d= \gcd(a,b),k_1= \frac{a}{d},k_2= \frac{b}{d}\) ,移项得 \(a=k_1 d,b=k_2 d\) ,又因为 \(d|(b-a),b-a=(k_2-k_1)d\) ,故 \(\gcd(a,b-a)= \gcd(k_1 d,(k_2-k_1)d)=d\) ,\(b\) 与 \(b-a\) 同理。
- 若 \(\forall a,b \in \mathbb{N}\) ,则 \(\gcd(2a,2b)= 2\gcd(a,b)\) 。
- 例题
- luogu P2152 [SDOI2009] SuperGCD
- 考虑对更相减损法进行优化:
- 当 \(a,b\) 均为偶数时,有 \(\gcd(a,b)=2 \times \gcd(\dfrac{a}{2},\dfrac{b}{2})\) 。
- 当 \(a\) 为偶数, \(b\) 为奇数时,有 \(\gcd(a,b)= \gcd(\dfrac{a}{2},b)\) 。
- 当 \(b\) 为偶数, \(a\) 为奇数时,有 \(\gcd(a,b)= \gcd(a,\dfrac{b}{2})\) 。
- 代码
- 考虑对更相减损法进行优化:
- luogu P2152 [SDOI2009] SuperGCD
- 例题
- 应用
- 若 \(n\) 为正整数,则 \(\bigoplus\limits_{i=1}^{n} \gcd(i,n)=\begin{cases}n&n \bmod 2=1\\ \dfrac{n}{2} \bigoplus n&n \bmod 2=0 \end{cases}\) 。
- luogu P10031 「Cfz Round 3」Xor with Gcd
- 证明
- 依据更相减损法,有 \(\gcd(n,x)=\gcd(n,n-x)\) ,即与 \(n\) 互质的数 \(x,n-x\) 成对出现。
- 当 \(n\) 为奇数时,有 \(\bigoplus\limits_{i=1}^{n} \gcd(i,n)=n \bigoplus\limits_{i=1}^{\frac{n-1}{2}} \gcd(i,n) \bigoplus \gcd(n-1,n)=n\) 。当 \(n\) 为偶数时,有 \(\bigoplus\limits_{i=1}^{n} \gcd(i,n)=n \bigoplus \gcd(\dfrac{n}{2},n)\bigoplus\limits_{i=1}^{\frac{n}{2}-1} \gcd(i,n) \bigoplus \gcd(n-1,n)=n \bigoplus \gcd(\dfrac{n}{2},n)=\dfrac{n}{2} \bigoplus n\) 。
- 若 \(n\) 为正整数,则 \(\bigoplus\limits_{i=1}^{n} \gcd(i,n)=\begin{cases}n&n \bmod 2=1\\ \dfrac{n}{2} \bigoplus n&n \bmod 2=0 \end{cases}\) 。
欧几里得算法
- 若 \(\forall a,b \in \mathbb{N}\) ,则 \(\gcd(a,b)= \gcd(b,a \bmod b)\) 。
-
证明
- 若 \(a<b\) ,则 \(\gcd(b,a \bmod b)=\gcd(b,a)=\gcd(a,b)\) 。
- 若 \(a \ge b\) ,设 \(d= \gcd(a,b),a=q \times b+r(0 \le r <b)\) ,则 \(r=a \bmod b=a-q \times b\) ,又因为 \(d|a,d|b,d|(q \times b)\) ,则 \(d|(a-q \times b)\) ,即 \(d|r\) ,故 \(\gcd(a,b)=\gcd(b,r)=\gcd(b,a \bmod b)\) 。
-
时间复杂度为 \(O(\log \max(a,b))\) 。
-
代码实现
点击查看代码
int gcd(int a, int b) { return b?gcd(b,a%b):a; }
-
例题
-
扩展欧几里得算法
-
裴蜀定理(贝祖定理, \(Bézout\) 定理)
- 对于任意一对整数 \(a,b\) ,存在一对整数 \(x,y\) ,满足 \(ax+by= \gcd(a,b)\) 。
- 证明
- 当 \(b=0\) 时,有一对整数 \(x=1,y=0\) 满足 \(a \times 1+0 \times 0=a= \gcd(a,0)\) 。
- 若 \(b \ne 0\) 时,则 \(\gcd(a,b)= \gcd(b,a \bmod b)\) 。假设存在一对整数 \(x,y\) ,满足 \(b \times x+(a \bmod b) \times y= \gcd(b,a \bmod b)\) ,又因为 \(b \times x+(a \bmod b) \times y=b \times x+(a-b \times \left\lfloor\dfrac{a}{b}\right\rfloor) \times y=a \times y+b \times (x-\left\lfloor\dfrac{a}{b}\right\rfloor \times y)\) ,所以令 \(x'=y,y'=x-\left\lfloor\dfrac{a}{b}\right\rfloor \times y\) ,此时有 \(ax'+by'= \gcd(a,b)\) 。
- 证明
- 应用
- 若 \(a,b\) 为正整数且互质,则不在集合 \(\{ ax+by|x,y \in \mathbb{N} \}\) 中的最大正整数为 \(ab-a-b\)。
- luogu P3951 [NOIP2017 提高组] 小凯的疑惑 / [蓝桥杯 2013 省] 买不到的数目
- 证明
- \(ax+by=ab-a-b\) 无非负整数解。
- 证明:易得两组解 \(\begin{cases}x_1=b-1 \\ y_1=-1\end{cases},\begin{cases}x_1=-1 \\ y_1=a-1\end{cases}\) 。利用 \(exgcd\) 不难求出 \(ax+by=ab-a-b\) 的一组特解 \(x_0,y_0\) ,则其通解可以表示为 \(\begin{cases}x=x_0+kb \\ y=y_0-ka\end{cases}\) ,其中 \(k \in \mathbb{Z}\) ,即 \(k\) 取遍整数集合。设 \(\begin{cases}b-1=x_0+k_1b \\ -1=y_0-k_1a\end{cases},\begin{cases}-1=x_0+k_2b \\ a-1=y_0-k_2a\end{cases}\) ,易得 \(k_1-k_2=1\) ,故 \(ax+by=ab-a-b\) 无非负整数解。
- \(ax+by=ab-a-b+c\) 有非负整数解,其中 \(c\) 为正整数。
-
证明:利用 \(exgcd\) 不难求出 \(ax+by=ab-a-b+c\) 的一组特解 \(x_0,y_0\) ,则其通解可以表示为 \(\begin{cases}x=x_0+kb \\ y=y_0-ka\end{cases}\) ,其中 \(k \in \mathbb{Z}\) ,即 \(k\) 取遍整数集合。取一组解 \(x',y'\) 使得 \(0 \le x' \le b-1\) ,
故 \(0 \le ax' \le ab-a\) ,
故 \(by' \le ax'+by' \le ab-a+by'\) ,
故 \(by' \le ab-a-b+c \le ab-a+by'\) ,
故 \(-b+c=c-b \le by'\) ,
故 \(\dfrac{c}{b}-1 \le y'\) 。
又因为 \(b,c \in \mathbb{N}^{*}\) ,
故 \(0 < \dfrac{c}{b}\) ,
故 \(-1<\dfrac{c}{b}-1 \le y'\) 。
又因为 \(y' \in \mathbb{N}\) ,
故 \(ax+by=ab-a-b+c\) 有非负整数解,其中 \(c\) 为正整数。
-
- \(ax+by=ab-a-b\) 无非负整数解。
- 若 \(a,b\) 为正整数且互质,则不在集合 \(\{ ax+by|x,y \in \mathbb{N} \}\) 中的最大正整数为 \(ab-a-b\)。
- 推广
- 对于任意非零整数 \(a_1,a_2,a_3, \dots a_n\) ,存在与之相对应的整数 \(x_1,x_2,x_3, \dots ,x_n\) ,满足 \(a_1 x_1+a_2 x_2+a_3 x_3+ \dots = \gcd(a_1,a_2,a_3, \dots ,a_n)\) 。
- 对于任意一对整数 \(a,b\) ,存在一对整数 \(x,y\) ,满足 \(ax+by= \gcd(a,b)\) 。
-
代码实现
点击查看代码
int exgcd(int a,int b,int &x,int &y) { if(b==0) { x=1; y=0; return a; } else { int d=exgcd(b,a%b,y,x); y-=a/b*x; return d; } }
- 上述程序求出方程 \(ax+by= \gcd(a,b)\) 的一组特解 \(x_0,y_0\) ,并返回 \(a,b\) 的最大公约数 \(d\) 。
- \(x_0,y_0\) 是 \(ax+by= \gcd(a,b)\) 中 \(|x|+|y|\) 最小的整数解。
- 上述程序求出方程 \(ax+by= \gcd(a,b)\) 的一组特解 \(x_0,y_0\) ,并返回 \(a,b\) 的最大公约数 \(d\) 。
-
推广
- 对于更为一般的方程 \(ax+by=c\) ,它有整数解当且仅当 \(\gcd(a,b)|c\) 。
- 令 \(d=\gcd(a,b),p=\dfrac{b}{d},q=\dfrac{a}{d}\) 。
- 特解:先求出 \(ax+by=d\) 的一组特解 \(x_0,y_0\) ,此时就得到了 \(ax+by=c\) 的一组特解 \(\begin{cases}x_0'=\dfrac{c}{d} \times x_0 \\ y_0'=\dfrac{c}{d} \times y_0\end{cases}\) 。
- \(x\) 的最小正整数解为 \(x_{min}=x_0'+\left\lceil\dfrac{1-x_0'}{p}\right\rceil \times p\) ,此时 \(y_0''=y_0'-\left\lceil\dfrac{1-x_0'}{p}\right\rceil \times q\) 。
- 若 \(y''>0\) ,即存在正整数解时,正整数解的数量为 \(\left\lfloor\dfrac{y''-1}{q}\right\rfloor +1\) ,\(x\) 的最大正整数解为 \(x_{max}=x_0'+\left\lfloor\dfrac{y''-1}{q}\right\rfloor \times p\) ,\(y\) 的最小正整数解为 \(y_{min}=((y''-1) \bmod q)+1\) ,\(y\) 的最大正整数解为 \(y_{max}=y_0'\) 。
- 若 \(y'' \le 0\) ,即不存在正整数解时, \(y\) 的最小正整数解为 \(y_{min}=y_0'+\left\lceil\dfrac{1-y_0'}{q}\right\rceil \times q\) 。
- luogu P5656 【模板】二元一次不定方程 (exgcd)
- 通解: \(\begin{cases}x'=\dfrac{c}{d} \times x_0+pk \\ y'=\dfrac{c}{d} \times y_0-qk\end{cases}\) 。其中 \(x_0,y_0,d\) 的定义同上, \(k\) 取遍整数集合 \(\mathbb{Z}\) 。
- 对于更为一般的方程 \(ax+by=c\) ,它有整数解当且仅当 \(\gcd(a,b)|c\) 。
-
例题
数论分块(整除分块)
- 数论分块可以快速计算一些含有除法向下取整的和式,例如 \(\sum\limits_{i=1}^{n}\left\lfloor \dfrac{k}{i} \right\rfloor\) ,主要利用了富比尼原理,基本思想是对一段 \(\dfrac{k}{i}\) 相同的数进行打包运算。
- 由 \(\sum\limits_{i=1}^{n}[i|n] \le 2\sqrt{n}\) ,有 \(\dfrac{n}{i}\) 至多有 \(O(\sqrt{n})\) 个取值。
- 然后考虑计算每个取值的左右边界。
- 设 \(f(x)=\left\lfloor \dfrac{n}{\left\lfloor \dfrac{n}{x} \right\rfloor} \right\rfloor\) ,有 \(f(x) \ge \left\lfloor \dfrac{n}{\frac{n}{x}} \right\rfloor=x\) ,进而有 \(\left\lfloor \dfrac{n}{f(x)} \right\rfloor \le \left\lfloor \dfrac{n}{x} \right\rfloor\) 。
- 又因为 \(\left\lfloor \dfrac{n}{f(x)} \right\rfloor \ge \left\lfloor \dfrac{n}{\dfrac{n}{\left\lfloor \dfrac{n}{x} \right\rfloor}} \right\rfloor =\left\lfloor \dfrac{n}{x} \right\rfloor\) ,有 \(\left\lfloor \dfrac{n}{f(x)} \right\rfloor = \left\lfloor \dfrac{n}{x} \right\rfloor\) 。
- 进而得到 \(i \in [x,f(x)]\) ,有 \(\left\lfloor \dfrac{n}{i} \right\rfloor\) 均相等。
- 例题
本文来自博客园,作者:hzoi_Shadow,原文链接:https://www.cnblogs.com/The-Shadow-Dragon/p/17640986.html,未经允许严禁转载。
版权声明:本作品采用 「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0) 进行许可。