注意到,题目所求的答案,即为卡特兰数相邻两项的差。
这里给出卡特兰数的前 项(下标从0开始)。
1, 1, 2, 5, 14,
42, 132, 429, 1430, 4862,
16796, 58786, 208012, 742900, 2674440,
9694845, 35357670, 129644790, 477638700, 769018837,
574654302, 508402548, 642327517, 661800571, 172443248,
496402342, 655221305, 840507789, 812999877, 893261956
卡特兰数可以用递推式求出:
因为数据增长很快,题目要求你进行取模。
此时除法需要转换为对应的逆元。
考虑到 998244353
是一个大素数,和小于它的任何正整数都互质。
所以可以使用费马小定理, 。
这里的 pow
需要使用快速幂求解,朴素乘法会超时,浮点函数会爆精度。
最后作差的时候,需要注意规约到 [0,mod) 的范围内,因为有可能出现 。
只需加一点修饰 。
python 参考代码:
mod=998244353
N=100100
k=[0]*N
k[0]=k[1]=1
for i in range(2,N):
k[i]=k[i-1]*(4*i-2)%mod*pow(i+1,mod-2,mod)%mod
t=int(input())
for i in range(1,t+1):
n=int(input())
print('Case #%d: %d'%(i,(k[n]-k[n-1]+mod)%mod))