数论学习笔记

BSGS

普通BSGS

求解 ax≡b(modp)a^x \equiv b \pmod p ,其中 a⊥pa \perp p 。

方程的解满足 0≤x<p0 \le x < p 。

令 x=A⌈p⌉−Bx = A \lceil \sqrt{p} \rceil - B ,其中 0≤A,B≤⌈p⌉0 \le A,B \le \lceil \sqrt{p} \rceil ,所以

aA⌈p⌉≡baB(modp) a^{A \lceil \sqrt{p} \rceil} \equiv ba^B \pmod{ p }

可以先算出等式右边 baBba^B 的所有取值,将其存到一个 hash 表里。
然后计算 aA⌈p⌉a^{A \lceil \sqrt{p} \rceil} 并查表寻找是否有相等值,即可得到xx。

因为 A,B≤pA,B \le \sqrt{p} ,所以时间复杂度就是 O(p)O(\sqrt{p}) 。

扩展BSGS

现在 aa 与 pp 不一定互质。

不互质就硬搞成互质的,设 d1=gcd⁡(a,p)d_1 = \gcd(a,p) 。

如果 d1∤bd_1 \nmid b ,则方程无解,否则把方程同时除以 d1d_1 ,得到

ad1⋅ax−1≡bd1(modpd1) \frac{a}{d_1} \cdot a^{x-1} \equiv \frac{b}{d_1} \pmod{ \frac{p}{d_1} }

若 pp 和 d1d_1 不互质就再除,直到 a⊥pd1d2⋯dka \perp \frac{p}{d_1 d_2 \cdots d_k} 。

记 D=∏i=1kdiD = \prod _{ i=1 } ^{k} d_i ,所以我们得到了

akD⋅ax−k≡bD(modpD)\frac{a^k}{D} \cdot a^{x-k} \equiv \frac{b}{D} \pmod{ \frac{p}{D} }

因为 a⊥pDa \perp \frac{p}{D} ,所以 ak⊥pDa^k \perp \frac{p}{D} ,现在就是一个普通的BSGS问题了,求解 x−kx-k 再加上 kk 即原方程的解。

不排除解小于等于 kk 的情况,这时候只要 O(k)O(k) 枚举验证一下即可。

杜教筛

用来快速求积性函数前缀和。

设给定的积性函数为 f(n)f(n) ,所以我们设 S(n)S(n) 为 ff 函数的前缀和

S(n)=∑i=1nf(i)S(n) = \sum _{i=1} ^{n} f(i)

现在的目标就是求出 S(n)S(n) 的值

考虑构造一个合适的积性函数 g(n)g(n) ,然后求他们卷积 h(n)h(n) 的前缀和

∑i=1nh(i)=∑i=1n(f∗g)(i)\sum _{i=1} ^{n} h(i) = \sum _{i=1} ^{n} (f \ast g)(i)

由卷积定义得

∑i=1nh(i)=∑i=1n∑d∣if(id)g(d)\sum _{i=1} ^{n} h(i) = \sum _{i=1} ^{n} \sum _{d|i} f(\frac{i}{d}) g(d)

把 dd 和 g(d)g(d) 提到前面

∑i=1nh(i)=∑d=1ng(d)∑i=1⌊nd⌋f(i)\sum _{i=1} ^{n} h(i) = \sum _{d=1} ^{n} g(d) \sum _{i=1} ^{\lfloor \frac{n}{d} \rfloor} f(i)

后面那个求和就是 ff 的前缀和

∑i=1nh(i)=∑d=1ng(d)S(⌊nd⌋) \sum _{i=1} ^{n} h(i) = \sum _{d=1} ^{n} g(d) S(\lfloor \frac{n}{d} \rfloor)

因为我们求解的是 S(n)S(n) ,所以将 d=1d=1 与 d>1d>1 分开计算

∑i=1nh(i)=g(1)S(n)+∑d=2ng(d)S(⌊nd⌋) \sum _{i=1} ^{n} h(i) = g(1)S(n) + \sum _{d=2} ^{n} g(d) S(\lfloor \frac{n}{d} \rfloor)

其中 gg 是积性函数,所以 g(1)=1g(1) = 1 ,移项得

S(n)=∑i=1nh(i)−∑d=2ng(d)S(⌊nd⌋) S(n) = \sum _{i=1} ^{n} h(i) - \sum _{d=2} ^{n} g(d) S(\lfloor \frac{n}{d} \rfloor)

如果我们可以快速求出 h(i)h(i) 和 g(n)g(n) 的前缀和,那么问题就可以用整除分块+递归求解了。

常见的积性函数

积性函数: φ⁡\operatorname{\varphi},μ\mu,σ\sigma,d⁡\operatorname{d}

完全积性函数: ε⁡\operatorname{\varepsilon},I⁡\operatorname{I},id⁡\operatorname{id}

其中

ε(n)⁡=[n=1]I⁡(n)=1idk⁡(n)=nkσk(n)=∑d∣ndk\begin{aligned} & \operatorname{\varepsilon(n)} = [n=1] \\ & \operatorname{I}(n) = 1 \\ & \operatorname{id_k}(n) = n^k \\ & \sigma _k (n) = \sum _{d|n} d^k \end{aligned}

一些常用的卷积性质

μ∗I⁡=ε⁡φ⁡∗I⁡=id1⁡μ∗id1⁡=φ⁡\begin{aligned} & \mu \ast \operatorname{I} = \operatorname{\varepsilon} \\ & \operatorname{\varphi} \ast \operatorname{I} = \operatorname{id_1} \\ & \mu \ast \operatorname{id_1} = \operatorname{\varphi} \end{aligned}

Min_25筛

求积性函数 f(x)f(x) 前缀和,其中 f(pk),p∈Primef(p^k), p \in Prime 可快速求出。

下面式子中设 pp 为一个质数, pxp_x 为第 xx 个质数

一、设完全积性函数 g(x)g(x) ,且 g(p)=f(p),p∈Primeg(p) = f(p), p \in Prime

二、设 G(n,x)G(n,x) 为 [1,n][1,n] 中质数或最小质因子大于等于 pxp_x 的和数的 gg 值的和,所以有递推式:

G(n,x+1)=G(n,x)−g(px)(G(⌊npx,x⌋)−∑p∈Primep≤px−1g(p)) G(n,x+1) = G(n,x) - g(p_x) \left( G(\lfloor \frac{n}{p_x}, x \rfloor) - \sum _{p \in Prime} ^{p \le p_{x-1}} g(p) \right)

三、设 S(n,x)S(n,x) 为 [1,n][1,n] 中最小质因子大于等于 pxp_x 的合数的 ff 值的和, tottot 为 [1,n][1,n] 中质数的个数,递推式:

S(n,x)=S(n,x+1)+∑i=1pxi+1≤n(f(pxi+1)+f(pxi)⋅(G(⌊npxi⌋,tot+1)−∑p∈Primep≤pxf(p)+S(⌊npxi⌋,x+1))) S(n,x) = S(n,x+1) + \sum _{i=1} ^{p_x^{i+1} \le n} \left( f(p_x^{i+1}) + f(p_x^i) \cdot \left( G(\lfloor \frac{n}{p_x^i} \rfloor, tot+1) - \sum _{p \in Prime} ^{p \le p_{x}} f(p) + S(\lfloor \frac{n}{p_x^i} \rfloor, x+1) \right) \right)

类欧几里得算法

用来求一些奇奇怪怪的式子

f(a,b,c,n)=∑i=0n⌊ai+bc⌋g(a,b,c,n)=∑i=0n⌊ai+bc⌋ih(a,b,c,n)=∑i=0n⌊ai+bc⌋2\begin{aligned} & f(a,b,c,n) = \sum _{i=0} ^n \left\lfloor \frac{ai+b}{c} \right\rfloor \\ & g(a,b,c,n) = \sum _{i=0} ^n \left\lfloor \frac{ai+b}{c} \right\rfloor i \\ & h(a,b,c,n) = \sum _{i=0} ^n \left\lfloor \frac{ai+b}{c} \right\rfloor ^2 \end{aligned}

无特殊说明,以下数学公式中以 %\% 代替  mod \bmod 。

函数 f(a,b,c,n)

分两种情况:

当 a≥c or b≥ca \ge c \space or \space b \ge c 时:

f(a,b,c,n)=∑i=0n⌊(⌊a/c⌋c−a%c)i+(⌊b/c⌋c−b%c)c⌋=∑i=0n(⌊a/c⌋i+⌊b/c⌋)+∑i=0n⌊(a%c)i+(b%c)c⌋=(n+1)(n+2)2⌊a/c⌋+(n+1)⌊b/c⌋+f(a%c,b%c,c,n)\begin{aligned} f(a,b,c,n) & = \sum _{i=0} ^{n} \small\left\lfloor \frac { (\lfloor a/c \rfloor c - a\%c)i + (\lfloor b/c \rfloor c - b\%c) } {c} \right\rfloor \\ & = \sum _{i=0} ^{n} \left( \lfloor a/c \rfloor i + \lfloor b/c \rfloor \right) + \sum _{i=0} ^{n} \left\lfloor \frac{ (a\%c)i + (b\%c) }{c} \right\rfloor \\ & = \frac{(n+1)(n+2)}{2} \lfloor a/c \rfloor + (n+1) \lfloor b/c \rfloor + f(a\%c, b\%c, c, n) \end{aligned}

这样我们就能把 aa 和 bb 缩小范围了。

当 a<c and b<ca < c \space and \space b < c 时:

f(a,b,c,n)=∑i=0n∑j=0⌊ai+bc⌋1=∑i=0n∑j=0⌊an+bc⌋[j<⌊ai+bc⌋]\begin{aligned} f(a,b,c,n) & = \sum _{i=0} ^{n} \sum _{j=0} ^{ \lfloor \frac{ai+b}{c} \rfloor } 1 \\ & = \sum _{i=0} ^{n} \sum _{j=0} ^{ \lfloor \frac{an+b}{c} \rfloor } \left[ j < \left\lfloor \frac{ai+b}{c} \right\rfloor \right] \\ \end{aligned}

记 m=⌊an+bc⌋m = \lfloor \frac{an+b}{c} \rfloor , 所以有

f(a,b,c,d)=∑i=0n∑j=0m−1[j+1≤ai+bc]=∑i=0n∑j=0m−1[cj+c−ba≤i]=∑i=0n∑j=0m−1[cj+c−b−1a<i]=∑j=0m−1∑i=0n[i>cj+c−b−1a]=∑j=0m−1(n−⌊cj+c−b−1a⌋)=mn−∑i=0m−1⌊cj+c−b−1a⌋=mn−f(c,c−b−1,a,m−1)\begin{aligned} f(a,b,c,d) & = \sum _{i=0} ^{n} \sum _{j=0} ^{m-1} \left[ j+1 \le \frac{ai+b}{c} \right] \\ & = \sum _{i=0} ^{n} \sum _{j=0} ^{m-1} \left[ \frac{cj+c-b}{a} \le i \right] \\ & = \sum _{i=0} ^{n} \sum _{j=0} ^{m-1} \left[ \frac{cj+c-b-1}{a} < i \right] \\ & = \sum _{j=0} ^{m-1} \sum _{i=0} ^{n} \left[ i > \frac{cj+c-b-1}{a} \right] \\ & = \sum _{j=0} ^{m-1} \left( n - \left\lfloor \frac{cj+c-b-1}{a} \right\rfloor \right) \\ & = mn - \sum _{i=0} ^{m-1} \left\lfloor \frac{cj+c-b-1}{a} \right\rfloor \\ & = mn - f(c,c-b-1,a,m-1) \end{aligned}

所以我们得到了 ff 的递归解法,递归过程就像是欧几里得算法求 gcd⁡\gcd 一样,所以是类欧几里得算法

f(a,b,c,n)={n(n+1)2⌊a/c⌋+(n+1)⌊b/c⌋+f(a%c,b%c,c,n),a≥c or b≥cmn−f(c,c−b−1,a,m−1),a<c and b<c\begin{aligned} f(a,b,c,n) = \begin{cases} \frac{n(n+1)}{2} \lfloor a/c \rfloor + (n+1) \lfloor b/c \rfloor + f(a\%c, b\%c, c, n) & , a \ge c \space or \space b \ge c \\ mn - f(c,c-b-1,a,m-1) & , a < c \space and \space b < c \end{cases} \end{aligned}

函数 g(a,b,c,n)

还是相同的分情况方法:

当 a>c or b>ca > c \space or \space b > c 时:

g(a,b,c,n)=∑i=0n⌊(⌊a/c⌋c+a%c)i+(⌊b/c⌋c+b%c)c⌋i=∑i=0n⌊a/c⌋i2+∑i=0n⌊b/c⌋i+∑i=0n⌊(a%c)i+b%cc⌋i=n(n+1)(2n+1)6⌊a/c⌋+n(n+1)2⌊b/c⌋+g(a%c,b%c,c,n)\begin{aligned} g(a,b,c,n) & = \sum _{i=0} ^n \left\lfloor \frac{ (\lfloor a/c \rfloor c + a\%c)i + (\lfloor b/c \rfloor c + b\%c) }{c} \right\rfloor i \\ & = \sum _{i=0} ^n \lfloor a/c \rfloor i^2 + \sum _{i=0} ^n \lfloor b/c \rfloor i + \sum _{i=0} ^n \left\lfloor \frac{(a\%c)i + b\%c}{c} \right\rfloor i \\ & = \frac{n(n+1)(2n+1)}{6} \lfloor a/c \rfloor + \frac{n(n+1)}{2} \lfloor b/c \rfloor + g(a\%c, b\%c, c, n) \end{aligned}

当 a<c and b<ca<c \space and \space b<c 时:

g(a,b,c,d)=∑i=0ni∑j=0m[j<⌊ai+bc⌋]=∑i=0ni∑j=0m−1[j+1≤ai+bc]=∑i=0ni∑j=0m−1[cj+c−ba≤i]=∑i=0ni∑j=0m−1[⌊cj+c−b−1a⌋<i]\begin{aligned} g(a,b,c,d) & = \sum _{i=0} ^n i \sum _{j=0} ^m \left[ j < \lfloor \frac{ai+b}{c} \rfloor \right] \\ & = \sum _{i=0} ^n i \sum _{j=0} ^{m-1} \left[ j+1 \le \frac{ai+b}{c} \right] \\ & = \sum _{i=0} ^n i \sum _{j=0} ^{m-1} \left[ \frac{cj+c-b}{a} \le i \right] \\ & = \sum _{i=0} ^n i \sum _{j=0} ^{m-1} \left[ \left\lfloor \frac{cj+c-b-1}{a} \right\rfloor < i \right] \end{aligned}

设 A=⌊cj+c−b−1a⌋A = \lfloor \frac{cj+c-b-1}{a} \rfloor ,则

g(a,b,c,d)=∑i=0ni∑j=0m−1[i>A]=∑j=0m−1∑i=0ni[i>A]=∑j=0m−1∑i=A+1n=12∑j=0m−1(n+A+1)(n−A)=12∑j=0m−1(n2+n−A2−A)=12(n2m+nm−∑j=0m−1⌊cj+c−b−1a⌋2−∑j=0m−1⌊cj+c−b−1a⌋)=12(n(n+1)m−h(c,c−b−1,a,m−1)−f(c,c−b−1,a,m−1))\begin{aligned} g(a,b,c,d) & = \sum _{i=0} ^n i \sum _{j=0} ^{m-1} [ i > A ] \\ & = \sum _{j=0} ^{m-1} \sum _{i=0} ^n i [i > A] \\ & = \sum _{j=0} ^{m-1} \sum _{i=A+1} ^{n} \\ & = \frac{1}{2} \sum _{j=0} ^{m-1} (n+A+1)(n-A) \\ & = \frac{1}{2} \sum _{j=0} ^{m-1} (n^2 + n - A^2 - A) \\ & = \frac{1}{2} \left( n^2 m + nm - \sum _{j=0} ^{m-1} \left\lfloor \frac{cj+c-b-1}{a} \right\rfloor ^2 - \sum _{j=0} ^{m-1} \left\lfloor \frac{cj+c-b-1}{a} \right\rfloor \right) \\ & = \frac{1}{2} \left( n(n+1)m - h(c,c-b-1,a,m-1) - f(c,c-b-1,a,m-1) \right) \end{aligned}

所以

g(a,b,c,n)={n(n+1)(2n+1)6⌊a/c⌋+n(n+1)2⌊b/c⌋+g(a%c,b%c,c,n),a>c or b>c12(n(n+1)m−h(c,c−b−1,a,m−1)−f(c,c−b−1,a,m−1)),a<c and b<c\begin{aligned} g(a,b,c,n) = \begin{cases} \frac{n(n+1)(2n+1)}{6} \lfloor a/c \rfloor + \frac{n(n+1)}{2} \lfloor b/c \rfloor + g(a\%c, b\%c, c, n) & , a > c \space or \space b > c \\ \frac{1}{2} \left( n(n+1)m - h(c,c-b-1,a,m-1) - f(c,c-b-1,a,m-1) \right) & , a < c \space and \space b < c \end{cases} \end{aligned}

函数 h(a,b,c,n)

仍然分两种情况:

当 a>c or b>ca > c \space or \space b > c 时:

h(a,b,c,n)=∑i=0n⌊ai+bc⌋2=∑i=0n⌊⌊a/c⌋ci+⌊b/c⌋cc+(a%c)i+(b%c)c⌋2=∑i=0n(⌊a/c⌋i+⌊b/c⌋+⌊(a%c)i+(b%c)c⌋)2\begin{aligned} h(a,b,c,n) & = \sum _{i=0} ^n \left\lfloor \frac{ai+b}{c} \right\rfloor ^2 \\ & = \sum _{i=0} ^n \left\lfloor \frac{\lfloor a/c \rfloor ci + \lfloor b/c \rfloor c }{c} + \frac{(a\%c)i + (b\%c)}{c} \right\rfloor ^2 \\ & = \sum _{i=0} ^n \left( \lfloor a/c \rfloor i + \lfloor b/c \rfloor + \left\lfloor \frac{(a\%c)i + (b\%c)}{c} \right\rfloor \right) ^2 \end{aligned}

设 A=⌊a/c⌋i+⌊b/c⌋A = \lfloor a/c \rfloor i + \lfloor b/c \rfloor,B=⌊(a%c)i+(b%c)c⌋B = \left\lfloor \frac{(a\%c)i + (b\%c)}{c} \right\rfloor , 所以

h(a,b,c,n)=∑i=0n(A+B)2=∑i=0n(A2+2AB+B2)=∑i=0nA2+2∑i=0nAB+∑i=0nB2∑i=0nA2=∑i=0n(⌊a/c⌋i+⌊b/c⌋)2=∑i=0n⌊a/c⌋2i2+2∑i=0n⌊a/c⌋⌊b/c⌋i+∑i=0n⌊b/c⌋2=n(n+1)(2n+1)6⌊a/c⌋2+n(n+1)⌊a/c⌋⌊b/c⌋+(n+1)⌊b/c⌋22∑i=0nAB=2∑i=0n(⌊a/c⌋i+⌊b/c⌋)⌊(a%c)i+(b%c)c⌋=2∑i=0n⌊a/c⌋i⌊(a%c)i+(b%c)c⌋+2∑i=0n⌊b/c⌋⌊(a%c)i+(b%c)c⌋=2⌊a/c⌋g(a%c,b%c,c,n)+2⌊b/c⌋f(a%c,b%c,c,n)∑i=0nB2=h(a%c,b%c,c,n)h(a,b,c,n)=n(n+1)(2n+1)6⌊a/c⌋2+n(n+1)⌊a/c⌋⌊b/c⌋+(n+1)⌊b/c⌋2+2⌊a/c⌋g(a%c,b%c,c,n)+2⌊b/c⌋f(a%c,b%c,c,n)+h(a%c,b%c,c,n)\begin{aligned} h(a,b,c,n) & = \sum _{i=0} ^n \left( A+B \right) ^2 \\ & = \sum _{i=0} ^n \left( A^2 + 2AB + B^2 \right) \\ & = \sum _{i=0} ^n A^2 + 2 \sum _{i=0} ^n AB + \sum _{i=0} ^n B^2 \\ \sum _{i=0} ^n A^2 & = \sum _{i=0} ^{n} \left( \lfloor a/c \rfloor i + \lfloor b/c \rfloor \right) ^2 \\ & = \sum _{i=0} ^n \lfloor a/c \rfloor ^2 i^2 + 2 \sum _{i=0} ^n \lfloor a/c \rfloor \lfloor b/c \rfloor i + \sum _{i=0} ^n \lfloor b/c \rfloor ^2 \\ & = \frac{n(n+1)(2n+1)}{6} \lfloor a/c \rfloor ^2 + n(n+1) \lfloor a/c \rfloor \lfloor b/c \rfloor + (n+1) \lfloor b/c \rfloor ^2 \\ 2 \sum _{i=0} ^n AB & = 2 \sum _{i=0} ^n \left( \lfloor a/c \rfloor i + \lfloor b/c \rfloor \right) \left\lfloor \frac{(a\%c)i + (b\%c)}{c} \right\rfloor \\ & = 2 \sum _{i=0} ^n \lfloor a/c \rfloor i \left\lfloor \frac{(a\%c)i+(b\%c)}{c} \right\rfloor + 2 \sum _{i=0} ^n \lfloor b/c \rfloor \left\lfloor \frac{(a\%c)i+(b\%c)}{c} \right\rfloor \\ & = 2 \lfloor a/c \rfloor g(a\%c, b\%c, c, n) + 2 \lfloor b/c \rfloor f(a\%c, b\%c, c, n) \\ \sum _{i=0} ^n B^2 & = h(a\%c, b\%c, c, n) \\ h(a,b,c,n) & = \frac{n(n+1)(2n+1)}{6} \lfloor a/c \rfloor ^2 + n(n+1) \lfloor a/c \rfloor \lfloor b/c \rfloor + (n+1) \lfloor b/c \rfloor ^2 + 2 \lfloor a/c \rfloor g(a\%c, b\%c, c, n) + 2 \lfloor b/c \rfloor f(a\%c, b\%c, c, n) + h(a\%c, b\%c, c, n) \end{aligned}

当 a<c and b<ca < c \space and \space b < c 时:

h(a,b,c,n)=∑i=0n⌊ai+bc⌋2=∑i=0n(2∑j=1⌊ai+bc⌋j+⌊ai+bc⌋)=2∑i=0n∑j=1⌊ai+bc⌋j+∑i=0n⌊ai+bc⌋=2∑i=0n∑j=0m−1(j+1)[j<⌊ai+bc⌋]−f(a,b,c,n)=2∑i=0n∑j=0m−1(j+1)[⌊cj+c−b−1a⌋<i]−f(a,b,c,n)=2∑j=0m−1(j+1)∑i=0n[i>⌊cj+c−b−1a⌋]−f(a,b,c,n)=2∑j=0m−1(j+1)(n−⌊cj+c−b−1a⌋)−f(a,b,c,n)=2n∑j=0m−1(j+1)−2∑j=0m−1j⌊cj+c−b−1a⌋−2∑j=0m−1⌊cj+c−b−1a⌋−f(a,b,c,n)=nm(m+1)−2g(c,c−b−1,a,n)−2f(c,c−b−1,a,n)−f(a,b,c,n)\begin{aligned} h(a,b,c,n) & = \sum _{i=0} ^n \left\lfloor \frac{ai+b}{c} \right\rfloor ^2 \\ & = \sum _{i=0} ^n \left( 2 \sum _{j=1} ^{ \lfloor \frac{ai+b}{c} \rfloor } j + \left\lfloor \frac{ai+b}{c} \right\rfloor \right) \\ & = 2 \sum _{i=0} ^n \sum _{j=1} ^{ \lfloor \frac{ai+b}{c} \rfloor } j + \sum _{i=0} ^n \left\lfloor \frac{ai+b}{c} \right\rfloor \\ & = 2 \sum _{i=0} ^n \sum _{j=0} ^{m-1} (j+1) \left[ j < \left\lfloor \frac{ai+b}{c} \right\rfloor \right] - f(a,b,c,n) \\ & = 2 \sum _{i=0} ^n \sum _{j=0} ^{m-1} (j+1) \left[ \left\lfloor \frac{cj+c-b-1}{a} \right\rfloor < i \right] - f(a,b,c,n) \\ & = 2 \sum _{j=0} ^{m-1} (j+1) \sum _{i=0} ^n \left[ i > \left\lfloor \frac{cj+c-b-1}{a} \right\rfloor \right] - f(a,b,c,n) \\ & = 2 \sum _{j=0} ^{m-1} (j+1) \left( n - \left\lfloor \frac{cj+c-b-1}{a} \right\rfloor \right) - f(a,b,c,n) \\ & = 2n \sum _{j=0} ^{m-1} (j+1) - 2 \sum _{j=0} ^{m-1} j \left\lfloor \frac{cj+c-b-1}{a} \right\rfloor - 2 \sum _{j=0} ^{m-1} \left\lfloor \frac{cj+c-b-1}{a} \right\rfloor - f(a,b,c,n) \\ & = nm(m+1) - 2g(c, c-b-1, a, n) - 2f(c, c-b-1, a, n) - f(a, b, c, n) \end{aligned}

所以

h(a,b,c,n)={n(n+1)(2n+1)6⌊a/c⌋2+n(n+1)⌊a/c⌋⌊b/c⌋+(n+1)⌊b/c⌋2+2⌊a/c⌋g(a%c,b%c,c,n)+2⌊b/c⌋f(a%c,b%c,c,n)+h(a%c,b%c,c,n),a>c or b>cnm(m+1)−2g(c,c−b−1,a,n)−2f(c,c−b−1,a,n)−f(a,b,c,n),a<c and b<c\begin{aligned} h(a,b,c,n) = \begin{cases} \frac{n(n+1)(2n+1)}{6} \lfloor a/c \rfloor ^2 + n(n+1) \lfloor a/c \rfloor \lfloor b/c \rfloor + (n+1) \lfloor b/c \rfloor ^2 + 2 \lfloor a/c \rfloor g(a\%c, b\%c, c, n) + 2 \lfloor b/c \rfloor f(a\%c, b\%c, c, n) + h(a\%c, b\%c, c, n) & , a > c \space or \space b > c \\ nm(m+1) - 2g(c, c-b-1, a, n) - 2f(c, c-b-1, a, n) - f(a, b, c, n) & , a < c \space and \space b < c \end{cases} \end{aligned}

生成函数

普通生成函数(OGF)

对于一个序列 aa ,它的普通生成函数定义为形式幂级数: F(x)=∑iaixiF(x) = \sum _{i} a_i x^i

也就是将 aa 中每一项作为多项式的系数。

基本运算

设两个序列 a,ba,b 的生成函数分别为 F(x),G(x)F(x), G(x) ,则有

F(x)±G(x)=∑i(ai±bi)xiF(x) \pm G(x) = \sum _{i} (a_i \pm b_i)x^i

也就是序列 ⟨ai±bi⟩\langle a_i \pm b_i \rangle 的生成函数为 F(x)±G(x)F(x) \pm G(x) 。

考虑乘法运算,也就是多项式卷积

F(x)G(x)=∑i(∑j=0iajbi−j)xiF(x)G(x) = \sum _i \left( \sum _{j=0} ^{i} a_j b_{i-j} \right) x^i

所以 ⟨∑_i=0na_ib_n−i⟩\langle \sum\limits \_{i=0} ^n a\_i b \_{n-i} \rangle 的生成函数就是 F(x)G(x)F(x)G(x)

封闭形式

形式幂级数的形式无法快速进行乘法运算,所以需要转化为封闭形式简化运算。

例如 ⟨1,1,⋯ ⟩\langle 1,1, \cdots \rangle 的普通生成函数为 F(x)=∑ixiF(x) = \sum _i x^i 。

可以发现 F(x)=xF(x)+1F(x) = xF(x) + 1 ,解方程得到 F(x)=11−xF(x) = \large\frac{1}{1-x} 。

这就是函数 F(x)=∑ixiF(x) = \sum _i x^i 的封闭形式。

等比数列 ⟨1,p,p2,p3,⋯ ⟩\langle 1, p, p^2, p^3, \cdots \rangle 的生成函数 F(x)=∑ipixiF(x) = \sum _i p^i x^i , 有

F(x)=pxF(x)+1F(x)=11−px\begin{aligned} & F(x) = pxF(x)+1 \\ & F(x) = \frac{1}{1-px} \end{aligned}

等比数列的封闭形式与展开形式之间的转化是常用的化简方法。

牛顿二项式定理

重新定义组合数:

Cnm=nm‾m!(n∈C,k∈n)C_n^m = \frac{n^{\underline{m}}}{m!} \quad (n \in \mathbf{C}, k \in \mathbf{n})

在这种情况下,对于 a∈Ca \in \mathbf{C} ,二项式定理为

(x+1)a=∑i≥0Cai xi(x+1)^a = \sum _{i \ge 0} C_a^i \space x^i

这样我们就可以通过牛顿二项式定理由封闭形式求某一项的系数了。

指数型生成函数(EGF)

序列 aa 的指数生成函数定义为形式幂级数:

F^(x)=∑iaixii!\hat F(x) = \sum _i a_i \frac{x^i}{i!}

基本运算

加减法还是一样,就是系数相加。

乘法不太一样,对于两个序列 a,ba,b ,设它们的指数生成函数分别为 F^(x)G^(x)\hat F(x) \hat G(x) ,则

F(x)G(x)=∑i≥0aixii!∑j≥0bjxjj!=∑n≥0in∑j=0naibn−i1i!(n−i)!=∑n≥0xnn!∑i=0nCniaibn−i\begin{aligned} F(x)G(x) & = \sum _{i \ge 0} a_i \frac{x^i}{i!} \sum _{j \ge 0} b_j \frac{x^j}{j!} \\ & = \sum _{n \ge 0} i^n \sum _{j=0} ^n a_i b_{n-i} \frac{1}{i!(n-i)!} \\ & = \sum _{n \ge 0} \frac{x^n}{n!} \sum _{i=0} ^n C_n^i a_i b_{n-i} \end{aligned}

所以序列 ⟨∑_i=0nC_nia_ib_n−i⟩\langle \sum \_{i=0} ^{n} C\_n^i a\_i b\_{n-i} \rangle的指数生成函数为F^(x)G^(x)\hat F(x) \hat G(x) 。

封闭形式

同样考虑封闭形式简化运算。

序列 ⟨1,1,⋯ ⟩\langle 1, 1, \cdots \rangle 的指数生成函数是 ∑n≥0xnn!=ex\sum _{n \ge 0} \frac{x^n}{n!} = e^x 。

类似地,等比数列 ⟨1,p,p2,⋯ ⟩\langle 1, p, p^2, \cdots \rangle 的指数生成函数是 ∑_n≥0pnxnn!=epx\sum \_{n \ge 0} \frac{p^n x^n}{n!} = e^{px}