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}\) 即可。

    其实范德蒙德卷积证明也很简单,考虑二项式定理即可。