Part 1 数论
介绍一种 \(O(1)\) 求 gcd 的方法。
-
可以证明 \(n=abc\),其中,任意一个数均满足 \(\leq \sqrt{n}\) 或是质数。
证明:
-
首先,\(n=1\) 显然成立。
-
我们考虑设 \(n\) 最小质因子是 \(p\),设 \(\frac{n}{p}=abc\),其中有 \(a\leq b\leq c\)。
-
若 \(a=1\),\(ap\) 是质数,显然成立。
-
若 \(a\neq 1\),那么 \(p\) 一定有 \(\leq a\),那么就有,因为有 \(pabc=n\),就有 \(p\leq n^{\frac{1}{4}}\)。
-
同时,\(a\) 一定 \(\leq ({\frac{n}{p}})^{\frac{1}{3}}\),那么 \(ap\) 一定就 \(\leq \sqrt{n}\)。
先预处理 \(n\) 的 \(a_n,b_n,c_n\),那么对于一个 \(n,m\) 来说:
记录 :
- \(A=\gcd(a_n,m)\)。
- \(B=\gcd(b_n,\frac{m}{A})\)。
- \(C=\gcd(c_n,\frac{m}{AB})\)。
那么 \(\gcd(n,,m)=ABC\)。
注意到,如果 \(a_n\) 是质数,只要看 \(m\) 是否是他倍数即可,否则,根据辗转相除法换成两个 \(\leq \sqrt n\) 的数的 \(\gcd\),就算完了。
-
费马小定理
定理内容:当 \(p\) 为质数,\(a\) 与 \(p\) 互质时,有 \(a^{p-1}=1\pmod p\)。
证明:
-
引理: \(ia,i\in[1,p-1]\) 在模 \(p\) 意义下一定互不相同,如果存在 \(i\neq j\),满足 \(ai\equiv aj\pmod p\),即 \(a(i-j)\equiv 0\pmod p\)。
因为 \(p\) 是质数,\(a\) 不是 \(p\) 的倍数,所以左式为 \(0\) 要求 \(i-j=0\),而 \(1\leq i,j<p,i\neq j\),显然矛盾,引理得证。
-
根据上述引理,我们知道 \(ai\) 在模 \(p\) 意义下构成了 \([1,p-1]\) 的所有数,那么就有 \(\prod ai\pmod p=\prod i,i\in[1,p-1]\),同时约掉 \(\prod i\),即 \(a^{p-1}=1\)。
欧拉定理
定理内容:\(a^{\phi(n)}\equiv 1\pmod n\)。
我们尝试将费马小定理进行推广,把 \(n\) 是质数的条件去掉,现在条件仅有 \(n\) 与 \(a\) 互质。
我们设与 \(n\) 互质的数分别为 \(b_1,b_2...,b_{\phi(n)}\),根据费马小定理推导,我们尝试证明 \(ab_i\neq ab_j(i\neq j)\),\(\prod ab_i\) 与 \(p\) 互质。
前者是显然的,后者由于 \(a,b\) 与 \(p\) 互质,所以也是显然的,于是我们就有 \(a^{\phi(n)}=1\pmod p\)。
欧拉函数
介绍 \(\phi\) 的一些性质。
-
定义式:\(\phi(n)=\sum \limits_{i=1}^n[\gcd(n,i)=1]\)。
-
计算式:根据容斥原理,\(\phi(n)=n\prod \frac{p_i-1}{p_i}\)。
-
积性:若 \(n,m\) 互质,则 \(\phi(nm)=\phi(n)\phi(m)\),这点由计算式不难证明,但是还有更加有趣的证明方式:
设与 \(a\) 互质的数为 \(a_1,a_2,...,a_{\phi(a)}\) 考虑 \([1,ab]\) 内与 \(a\) 互质的数为 \(ia+a_j(0\leq i<b)\)。
因为 \(a,b\) 互质,所以 \(ia\) 在模 \(b\) 意义下互不相同,所以对于一个 \(a_j\),\(ia+a_j\) 在模 \(b\) 意义下取遍了 \([0,b-1]\)。
不难发现,每组内与 \(b\) 互质的数是 \(\phi(b)\),所以与 \(ab\) 互质的数个数为 \(\phi(a)\phi(b)\)。
-
若 \(a|b\),则 \(\phi(ab)=a\phi(b)\)。
这点根据计算式不难得出。
-
欧拉反演:\(\sum\limits_{d|n}\phi(d)=n\)。
\(\sum \limits_{d|n}\phi(d)=\sum \limits_{d|n}\phi(\frac{n}{d})=\sum\limits_{d|n}\sum\limits_{i=1}^{\frac{n}{d}}[\gcd(\frac{n}{d},i)=1]=\sum\limits_{d|n}\sum\limits_{i=1}^n[\gcd(n,i)=d]=n\)。
证毕。
-
若 \(a|b\),则 \(\phi(a)|\phi(b)\),由计算式不难发现。
-
对于 \(n>2\),有 \(\phi(n)\) 是偶数。
证明:对于任意 \(x\) 与 \(n\) 互质,我们一定有 \(n-x\) 也与 \(n\) 互质,特殊情况是 \(n-x=x\),即 \(x=\frac{n}{2}\),当 \(n>2\) 时,显然 \(x\neq 1\)。
-
使得 \(\gcd(n,x)=d\) 且 \(1\leq x\leq n\) 的 \(x\) 的个数为 \(\phi(\frac{n}{d})\)。
Exgcd
求解方程 \(ax+by=c\) 。
显然,该方程有解的条件是 \(c\) 为 \(\gcd(a,b)\) 的倍数,我们来证明充分性:
方程两边同除掉 \(\gcd(a,b)\),显然有 \(a'x+b'y=c'\),此时 \(\gcd(a,b)\) 互质,因为 \(c'\) 可能是任意整数,所以我们就要证明 \(a'x+b'y\) 可以取遍任意整数,也就是只要证明可以取遍 \(a'x+b'y\) 可以取遍 \([0,b-1]\) 中的任意整数,由于 \(a,b\) 互质,这一点是显然的。
-
这引申出来一个问题模型:初始置 \(s=0\),每次 \(s\) 变为 \((s+a)\bmod b\),问 \(s\) 的取值可能有多少种。
我们显然要解方程 \(ka\equiv 0\pmod b\),求解最小的 \(k\),质因数分解,我们需要补上 \(a\) 中没有的,\(b\) 中有的因子,即 \(k=\frac{b}{\gcd(a,b)}\)。
Exgcd 求解过程:
- 计算方程 \(ax+by=(a,b)\) 的解。
- 将 \(x,y\) 同乘 \(\frac{c}{(a,b)}\) 得到 \(x',y'\)。
- 根据符号反向调整 \(x',y'\) 的正负,得到最终答案。
逆元
若 \(a,p\) 互质,才有逆元。若 \(p\) 还为质数,则可以用费马小定理。
若 \(p\) 不为质数,相当于求解方程 \(ax\equiv 1\pmod p\)。
这个等价于求解方程 \(ax+py=1\),由裴属定理可知,只有当 \(a,p\) 互质时,才有逆元。
线性求逆元:给定 \(n\) 个数,第 \(i\) 个记为 \(a_i\),求它们在\(\mod p\) 意义下的逆元,保证 \(p\) 质数。
简化版本,给定 \(n,p\),求出 \(1\sim n\) 在 \(\mod p\) 意义下的逆元,保证 \(p\) 质数。
建议直接背过简化版本的公式: \(i^{-1}=-\frac{p}{i}\cdot (p\% i)^{-1}\) 。
威尔逊定理
定理内容:\((p-1)! \equiv -1\pmod p\)。(\(p\) 为素数,下文等号均在模 \(p\) 意义下)
证明:\(p=2\) 时,定理显然成立,原式等价于 \(2\times 3\times 4...\times (p-2)=1\),由于 \(p\) 是奇数,所以 \([2,p-2]\) 共 \(p-3\) 个(偶数个数),考虑将他们配对。
- 一定不存在 \(x\in[2,p-2]\),使得 \(x^{-1}=x\),若 \(x^{-1}=x\),则 \(x^2=1\),\(x^2-1=0\),\((x+1)(x-1)=0\),由于 \(x+1,x-1\) 均不是 \(p\) 的因数,更不包含 \(p\) 这个因子,所以命题成立。
- 对于 \(x^{-1}=y\),那么 \(y^{-1}=x\),一个数只可能有一个逆元(假设一个数 \(x\) 有 \(a,b\) 两个逆元,则 \(xa=xb=1\),那么 \(b-a=0\),则 \(a=b\)。
- \(p-1\) 显然不会参与逆元配对,因为他的逆元是 \(p-1\)。
- 剩下的数,显然逆元在 \([1,p-1]\) 之中,但不可能是 \(p-1,1\),所以可以做到两两配对。
中国剩余定理
考虑若干个方程 \(x\equiv a_i\pmod {m_i}\),保证 \(m_i\) 两两互质,求 \(x\)。
考虑两个方程 \(x\equiv a_1\pmod {m_1}\),\(x\equiv a_2\pmod{m_2}\),如何合并。
首先,设 \(x=k_1\times m_1+a_1\)。带入 \(2\) 得 \(k_1\times m_1+a_1=a_2\pmod {m_2}\)。
移项得 \(k_1=\frac{(a_2-a_1)}{m_1}\)。直接求 \(m_1\) 在模 \(m_2\) 意义下的逆元算 \(k_1\),再求 \(x\) 即可。
这俩方程合并后的结果是 \(x \equiv b_3\pmod{m_3}\),其中 \(m_3=lcm(m_1,m_2)\),\(b_3\) 为上一个方程的解。
若不保证互质咋做?
考虑把两个方程都写成 \(y=kx+b\) 的形式。
则 \(k_1\times m_1+b_1=k_2\times m_2+b_2\)。
移项得 \(k_1\times m_1-k_2\times m_2=b_2-b_1\)。
这已经可以使用 exgcd 解了,但是我们可以进一步化简。
令 \(g=\gcd(m_1,m_2)\),方程两边同除 \(g\) 得 \(\frac{m_1}{g}k_1-\frac{m_2}{g}k_2=\frac{b_2-b_1}{g}\)。
则 \(\frac{m_1}{g}k_1\equiv \frac{b_2-b_1}{g}\pmod{\frac{m_2}{g}}\)。
整理得 \(k_1=\frac{b_2-b_1}{g}\cdot (\frac{m_1}{g})^{-1} \pmod {\frac{m_2}{g}}\),于是可以直接算逆元。
莫反
默认大家都会最基础的莫反。
P4844 LJJ爱数数
- 容易发现,原题求的其实是 \(\sum\limits_{a=1}^n \sum\limits_{b=1}^n [\gcd(a,b,\frac{ab}{a+b})=1]\)。
- 这等价于 \(\sum\limits_{a=1}^n \sum\limits_{b=1}^n[\gcd(a^2+ab,b^2+ab,ab)=a+b]\)。
- 根据辗转相消,原式可化为 \(\sum \limits_{a=1}^n\sum \limits_{b=1}^n[\gcd(a^2,b^2,ab)=a+b]\)。
- 拆解 \(\gcd\),原始等价于 \(\sum \limits_{a=1}^n\sum \limits_{b=1}^n[\gcd(\gcd(a^2,ab),\gcd(b^2,ab))=a+b]=\sum\limits_{a=1}^n \sum\limits_{b=1}^n[\gcd(a\gcd(a,b),b\gcd(a,b))=a+b]=\sum\limits_{a=1}^n\sum\limits_{b=1}^n[\gcd^2(a,b)=a+b]\)。
- 那么这就变成了一个可以莫反的形式,直接做即可,复杂度是 \(O(\sqrt{n} \log n)\)。
P3312 [SDOI2014]数表
考虑莫反,我们把先枚举 \(g\),再枚举 \(i,j\),就可以得到一个经典的莫反形式,设 \(f(x)\) 代表 \(x\) 的因数和。
得到式子 \(\sum\limits_{g=1}^n f(g)\sum\limits_{d=1}^{\frac{n}{d}}\mu (d)\frac{n}{dg}\frac{m}{dg}\)。
考虑换元,令 \(T=dg\),那么要求 \(\sum \limits_{T=1}^n\frac{n}{T} \frac{m}{T}\sum\limits_{g|T}f(g)u(\frac{T}d)\)。
但是有 \(a\) 的限制,也就是要求 \(f(g)\leq a\),把后面的部分看成一个关于 \(T\) 的函数 \(G(T)\),那么我们现在查询是查询 \(G\) 的区间和,就是实时维护 \(G\),考虑把询问离线,把 \(a\) 从小到大排序,那么每次我们新加入一个 \(a\),只要把 \(a\) 的倍数的 \(G\) 值更新一下即可,用树状数组维护,复杂度是 \(O(T\sqrt{n}\log n)\)。
P3327 [SDOI2015]约数个数和
考虑如何求 \(d(n)\),考虑 \(d(n)=p_1^{k_1}p_2^{k_2}....p_m^{k_m}\),那么 \(d(n)=\prod (k_i+1)\)。
考虑第 \(d(i,j)\),设分解质因数得到的指数序列分别是 \(a,b\),其实就是 \(\prod (a_i+b_i+1)\)。
这个我们可以理解成,对于一个质因子,我们要么在 \(i\) 中选,要么在 \(j\) 中选,要么不选,于是就得到:
\(d(i,j)=\sum\limits_{1\leq a\leq i,1\leq b\leq j} \gcd(a,b)=1\)。
然后再按照莫反的套路做即可。
P4619 [SDOI2018]旧试题
前面的步骤和上个题基本一致,最后要求:
\(\sum \sum \sum u(i)u(j)u(k) F(a,lcm(i,j))F(b,lcm(j,k))F(c,lcm(i,k))\)。
我们在两个点之间连一条边权为 \(lcm(i,j)\) 的边,那么其实就是三元环计数。
边数理论上是 \(n^2\) 级别,但实际可能不大,因为有 \(lcm\leq n\) 的要求。
于是我们枚举 LCM,分解质因数,注意到如果两个数的 \(u\) 值任意一个为 \(0\),那么都是没贡献的。
于是 LCM 的 \(u\) 一定不为 \(0\),分解质因数,然后枚举子集就行,最后跑一边三元环计数就好啦。
P4240 毒瘤之神的考验
如何求 \(\phi(n)\),经典的公式是 \(n\prod \frac{p_i-1}{p_i}\)。
那么 \(\phi(ij)\) 如果直接把 \(\phi(i)\phi(j)\) 相乘会多算什么,如果他们有公共的质因子,那么这个质因子被算了两遍,我们要把他除掉,所以除掉 \(\phi(\gcd(i,j))\) 即可,但是这时候我们有多除掉了一个 \(\gcd(i,j)\),再乘上就行了。
那么根据经典的莫反,我们可以最终把柿子整理成 \(\sum\limits_{k=1}^n f(k)g(k,\frac{n}{k})g(k,\frac{m}{k})\)。
如何求他?看起来十分的困难,不好数论分块,我们考虑同时出现 \(k\) 与 \(n/k\),根号分治。
对于 \(\leq B\) 的 \(k\),暴力计算答案很方便,复杂度是 \(O(B)\) 的。
对于 \(\ge B\) 的 \(k\),\(\frac{n}{k}\leq \frac{n}{B}\),是个很小的数,我们可以设 \(t(a,b,n)\) 代表 \(\sum\limits_{i=1}^n f(a)g(i,a)g(i,b)\)。
这里的 \(a,b\) 都特别小,我们花点时间预处理即可,值得一提的是,每一段需要算 \(t(\frac{n}{k},\frac{m}{k},r)-t(\frac{n}{k},\frac{m}{k},l-1)\),所以说,一定有 \(n\leq \frac{mx}{a}\),所以预处理复杂度是 \(Bn\),而并非网上广为流传的 \(B^2n\),理论上 \(B\) 取根号最优,但实际测试中,取 \(50\) 更优秀。
Part2 八重计数法
八重计数法求法
Part2.1
-
\((0,0,0)\),即球本质不同,盒子本质不同,不必填满。
对于每一种球考虑,显然每一个球可以放在任意一个盒子中,有 \(m\) 种方案,根据乘法原理,答案为 \(m^n\)。
-
\((0,0,1)\),与上一问的区别仅在于 盒子必须填满。
一个错误想法:先任选 \(m\) 个球,把他们填到盒子中,转化成问题 \((0,0,0)\),但这样是错的,因为球本质不同,盒子也本质不同。
先补集转化,可以求至少一个盒子不满的方案数,再容斥,至少一个盒子不满的方案数即为 \(\sum\limits_{k=1}^m(-1)^{k+1}\tbinom{m}{k}(m-k)^n\),再用总方案数 \(m^n\) 减掉即可,总式子可以写作\(\sum\limits_{k=0}^m(-1)^{k}\tbinom{m}{k}(m-k)^n\)。
当然,也可以写成二项式反演形式,也是容易证明的。
-
\((0,1,1)\),与上一问的区别仅在于 盒子本质相同。
那么记上一问答案为 \(s\),这一问答案就是 \(\frac{s}{m!}\),即 \(\frac{1}{m!}\sum\limits_{k=0}^m(-1)^{k}\tbinom{m}{k}(m-k)^n\)。
上式也就是著名的第二类斯特林数,记做 \(S(n,m)\)。
-
\((0,1,0)\),与上一问的区别仅在于 盒子不必填满。
那么枚举几个盒子不满(假设 \(k\) 个),就转化成了上一问,因为盒子本质相同,所以系数是 \(1\),而不是组合数,这一问答案即为 \(\sum\limits_{k=0}^{m-1} S(n,m-k)\)。
Part2.2
-
\((1,0,0)\),即球本质相同,盒子本质不同,不必填满。
经典插板法,加 \(m-1\) 个球,现在共有 \(n+m-1\) 共有,随意挑取 \(m-1\) 个球作为板子,那么每一种挑选方案都对应一种球放入盒中的方案,故方案数为 \(\tbinom{n+m-1}{m-1}\)。
-
\((1,0,1)\),与上一问的区别仅在于 盒子必须填满。
与上一问类似,仍然插板,但这次是插 \(n-1\) 个板子,在其中选 \(m-1\) 个(这样才保证非空),故方案数 \(\tbinom{n-1}{m-1}\)。
Part2.3
-
\((1,1,0)\),即球本质相同,盒子本质相同,不必填满。
只会使用 dp 来解决,可以设 \(dp(i,j)\) 为目前使用了 \(i\) 个球,填了(可以不满)\(j\) 个盒子的方案数,那么有转移方程 \(dp(i,j)=dp(i,j-1)+dp(i-j,j)\) (分类讨论 \(j\) 个盒子中是否有空盒子)。
-
\((1,1,1)\),与上一问的区别仅在于 盒子必须填满。
那么我们先每个盒子里都放一个球,答案就是 \(dp(n-m,m)\)(dp 是上一问求出的数组)。
至此,\(8\) 情况全部讨论完。
一些基本恒等式
定义
- 组合数又叫二项式系数,符号为 \(\tbinom{n}{m}\),本文暂且只讨论 \(n,m\) 均为 整数 的情况,所以若无特殊说明,出现的数均为整数。
- 我们称 \(n\) 为上指标,\(m\) 为下指标,容易知道,上指标对应杨辉三角中的 行,下指标对应杨辉三角中的 列。
- 定义 \(x^0=1(x\leq 0)\)。
单项组合数变换
-
根据定义,显然有公式 \(\tbinom{n}{m}=\tbinom{n}{n-m},(n\geq0)\),这个称为 对称恒等式。
-
根据定义,显然有公式 \(\tbinom{n}{m}=\frac{n}{m}\tbinom{n-1}{m-1},(m\neq0)\),\(m\tbinom{n}{m}=n\tbinom{n-1}{m-1}\),这两个称为 吸收恒等式。
-
与上条不等式相伴的下指标不变的恒等式:\((n-m)\tbinom{n}{m}=n\tbinom{n-1}{m}\)。
\((n-m)\tbinom{n}{m}=(n-m)\tbinom{n}{n-m}=n\tbinom{n-1}{n-m-1}=n\tbinom{n-1}{m}\)。
-
\(\tbinom{n}{m}=\tbinom{n-1}{m}+\tbinom{n-1}{m-1}\),加法公式。
-
\(\tbinom{r}{m}\tbinom{m}{k}=\tbinom{r}{k}\tbinom{r-k}{m-k}\),证明可以考虑组合意义,比较简单。
和式组合数变单项组合数
-
\(\sum\limits_{k\leq m}\tbinom{n+k}{k}=\sum\limits_{k\leq m}\tbinom{n+k}{n}=\tbinom{n+m+1}{n+1}\)。
这个叫做 平行求和法 证明的方法有很多。
-
将 \(\tbinom{n+m+1}{n+1}\) 展开,容易得到左式。
-
直接在杨辉三角上考虑。
对长方框内的东西求和,答案就是五角星。
-
-
\(\sum\limits_{0\leq k\leq n}\tbinom{k}{m}=\tbinom{n+1}{m+1},(n\geq0,m\geq0)\)。
显然,上式左边当 \(k\geq m\) 时才有值,于是
\(\sum\limits_{m\le k \leq n}\tbinom{k}{m}=\sum\limits_{0\leq k\leq n-m}\tbinom{k+m}{m}=\tbinom{n+1}{m+1}\)。
你会惊讶的发现他和平行求和法是一个东西,只不过枚举的 \(k\) 意义不同,但是这个貌似看起来更加直观,于是他叫做 关于上指标求和,个人更喜欢这个公式。
-
二项式定理
这个大家都会,证明就略过,公式为 \((x+y)^n=\sum\limits_{0\leq k\leq n}\tbinom{n}{k}x^ky^{n-k}\)。
有了他,我们就有很多特殊形式。
- 令 \(x=y=1\),则 \(2^n=\sum\limits_{0\leq k\leq n}\tbinom{n}{k}\)。
- 令 \(x=-1,y=1\),则 \(0=\sum\limits_{0\leq k\leq n}(-1)^k\tbinom{n}{m}\)。
更高级的,我们其实有广义二项式定理,适用于上指标是任意实数。
\((1+x)^a=\sum\limits_{m=0}^{正无穷}\tbinom{a}{m}x^m\),证明我不会,(ix35 也不会)。
需要引入一个公式,上指标反转,即 \(\tbinom{n}{m}=\tbinom{m-n-1}{m}(-1)^m\),证明可以直接展开。
根据这个,我们可以知道,\((1+x)^{-n}=\sum\limits_{i=0}^{正无穷}\tbinom{-n}{i}x^i=\sum\limits_{i=0}^{正无穷}\tbinom{n+i-1}{i}x^i\)。
那么 \((1-x)^{-n}=\sum\limits_{i=0}^{正无穷}\tbinom{n+i-1}{i}(-x)^i=\sum\limits_{i=0}^{正无穷}(-1)^i\tbinom{n+i-1}{i}x^i\),这就是在生成函数中提到的广义二项式定理的证明!(你可能会对于下指标是否是 \(i-1\) 有疑问,但其实,\(i\) 是球数,\(n-1\) 是板子数!)
-
范德蒙德卷积公式
\(\sum\limits_{0\leq k\leq n}\tbinom{r}{k}\tbinom{s}{n-k}=\tbinom{r+s}{n}\),证明可以考虑组合意义,也比较简单。
他还有一个形式:
\(\sum\limits_{i=0}^{\min(n,m-k)}\tbinom{n}{i}\tbinom{m}{i+k}=\tbinom{n+m}{n+k}\),只需要将 \(\tbinom{n}{i}\) 换为 \(\tbinom{n}{n-i}\) 即可。
其实范德蒙德卷积证明也很简单,考虑二项式定理即可。