题意:
p(i)=ui+v
G(x)=i=1∏m1−p(i)x1
给
n≤1018,m≤2×105,1≤u,v≤109,求
[xn]G(x)mod998244353。
假设一个系数序列
b1⋯m 存在,满足
G(x)=i=1∑m1−p(i)xbi
如果学过复变分析的话,可以发现这是标准的部分分式分解形式。
G(x) 有简单极点(分母为线性因子互异),所以存在合法的
b,可以用留数解得。
这是 o3 告诉我的,并且它给出了更简洁的式子,
但我其实看不懂这句话我通过一些学习一定程度上看懂了这句话。
反正先假设
b 存在,然后尝试去解它。
考虑解某个特殊的
i=j 的
bj。
G(x)=1−p(j)xbj+i=1,i=j∑m1−p(i)xbi
把分母乘过去。
(1−p(j)x)G(x)=bj+i=1,i=j∑mbi1−p(i)x1−p(j)x
取
x=p(j)1,有
1−p(j)x=0,可以把那个
∑ 消掉。
bj=(1−p(j)p(j))G(p(j)1)
不能直接消成
bj=0×G(p(j)1)=0,因为
G(p(j)1) 代进去算的话会有一个项是
1−p(j)p(j)1,所以整个
G(p(j)1) 算出来是
∞,
0×∞ 没有定义。
形式化地说就是,
G(x) 在
x=p(j)1 处有一个极点。
o3 说这里应该“用留数定理显式计算极限”,不过我不会高等的工具,所以我代入
G(x) 的定义式
∏i=1m1−p(i)x1。
bj=(1−p(j)p(j))i=1∏m1−p(j)p(i)1
把
∏ 里面
i=j 的项摘出来消掉,这样就没有极点了,然后通分推一推。
bj=i=1,i=j∏m1−p(j)p(i)1=i=1,i=j∏mp(j)p(j)−p(i)1=i=1,i=j∏mp(j)−p(i)p(j)=p(j)m−1i=1,i=j∏mp(j)−p(i)1
往
∏ 里面代入
p(i) 的定义式。
bj=p(j)m−1i=1,i=j∏mp(j)−p(i)1=p(j)m−1i=1,i=j∏m(uj+v)−(ui+v)1=p(j)m−1i=1,i=j∏mu(j−i)1=um−1p(j)m−1i=1,i=j∏mj−i1
考虑求
∏i=1,i=jm(j−i),拆成
i<j 和
i>j 两个部分,前者的贡献是
(j−1)!,后者的贡献是
(−1)m−j(m−j)!。
bj=um−1(j−1)!(−1)m−j(m−j)!p(j)m−1
大功告成!
然后代入到
G(x)=∑i=1m1−p(i)xbi。
注意到根据经典式子(在原题中其实是先推出这个式子,然后再写成上面“题意”里的式子),
1−p(i)x1=∑k=0∞p(i)kxk,所以有
[xn]G(x)=i=1∑mum−1(i−1)!(−1)m−i(m−i)!p(i)m−1p(i)n=i=1∑mum−1(i−1)!(−1)m−i(m−i)!p(i)n+m−1
时间复杂度
Θ(mlogn),空间复杂度
O(1)。