收获速记 0530
一个厉害的问题。
给定 \(u,v,m,n\),求 \([x^n]\prod\limits_{i=0}^{m}\frac{1}{1-(ui+v)x}\),限制 \(m\le 2\times 10^5,n\le 10^{18}\)。
首先有一个比较慢的 \(O(n\log m\log n)\) 的线性递推做法,就不提了,这个做法没前途。
我们首先下意识的尝试去把 \(\prod\) 拆成 \(\sum\),但是每个 \(\sum\limits_{i=0}^{m}\frac{w_i}{1-(ui+v)x}\) 上的 \(w_i\) 是什么我们不得而知。我们可以分治+half gcd方法做到 \(O(n\log^3 m)\)。
然后一个及其不平凡的想法是,我们考虑 CRT,首先是发现如果 \(n=0\) 我们可以直接返回 1,否则的话 \([x^n]\frac{1}{\prod\limits_{i=0}^{m}(1-(ui+v)x)}= [x^n](\frac{1}{\prod\limits_{i=0}^{m}(1-(ui+v)x)}+C)\),实际上加的这个常数 \(C\) 在放到分子上,使得我们对于分子只关心它对 \(\bmod \prod\limits_{i=0}^{m}(1-(ui+v)x)\) 的余数。
我们考虑 CRT 拆开,把分子的约束变为 \(Nu(x)\equiv 1\mod (1-(ui+v)x)\)。
然后我们套用 CRT 发现其系数本质就可以直接放在那个小分数的分子上。然后一统计算化简即可。而且这个想法即使不在这个题目背景下,在一般性的分式化简中同样可以应用,这可以把上文那个毫无用处的 half-gcd 去掉,变成一个简单的多项式分治取模的行为,降低复杂度为 2log。
这个问题本身是否与分式相加与多项式多点求值这两者的转置关系相关?我还不是很清楚。感觉很玄妙。
一个容易忘记的小技巧。
我们在处理同余背包的时候是可以增量加入的,增量加入通常具有常数小,内存少的优势。

浙公网安备 33010602011771号