题目大意
给定
n,m,q,p
,令
c[i][j]=(qj×c[i−1][j]+c[i][j−1])modp
假如
i=0
或
j=0
,
c[i][j]=1
。
求出
c[n][m]
数据范围
n,m,q≤109
p≤2∗105
(q,p)=1
且
q,p
均为质数。
T
组
题解
首先这东西叫q-Binomial Coefficient,查阅相关资料后可以知道,
c[n][m]F(n)=F(n+m)F(m)×F(n)=∏i=1n(qi−1)
那么现在的问题基本可以变成,给定 n ,求
令 a 为最小的
F(n)=∏i=1n(qi−1)=∏a|in(qi−1)×∏a∤in(qi−1)=∏i=1⌊na⌋(qia−1)×(∏i=1a−1qi−1)⌊na⌋×∏i=0nmodaqi−1
对于后两项可以直接预处理,现在的问题是怎么求第一项:
∏i=1n(qia−1)=∏i=1n(qa−1)×⎛⎝∑j=0i−1qja⎞⎠=(qa−1)n∏i=1n⎛⎝∑j=0i−1qja⎞⎠
这里需要注意,在实际求的时候,我们需要另外记一个变量x表示最终要乘上(q^a-1)^x,不能直接乘上去,因为会变成0而导致最终没有逆元,但实际上可能分数上下消掉。
接下来的问题变成求第二项:
∏i=1n⎛⎝∑j=0i−1qja⎞⎠=⎛⎝∏p∤ini⎞⎠×∏i=1⌊np⌋⎛⎝∑j=0ip−1pja⎞⎠=⎛⎝∏p∤ini⎞⎠×⎛⎝∑i=0p−1qia⎞⎠⌊np⌋×∏i=1⌊np⌋⎛⎝∑j=0i−1qja⎞⎠
这里对第二项的处理方法和 (qa−1)x 相同,就是另外记一个变量 y 表示最后要乘上
于是这题就以 O(p+Tlogp) 的复杂度解决了。