hdu 5177 (1e18范围的卡特兰数)
题意:
求第n个卡特兰数,模3814697265625 (5^18)
限制:
有20组数据,1 <= n <= 1e18
思路:
1. 卡特兰数的表达式:
ans = 1/(n+1) * C(2*n,n)
-> ans = 1/(n+1) * (2n)! / n! / n! ---1式
2. 因为要模5^18,求逆元要求互质,所以先把"1式"中的因子5全部去掉
3. 然后看不含因子5的阶乘,f(n!)
4. 设g(x,n)=(x+1)(x+2)(x+3)(x+4)(x+6)..(x+n)%M,x+d里面的d不是5的倍数
5. 则有f(n!)=g(0,n)*g(0,n/5)*g(0,n/25)*…*g(0,0)%M ---这里需要log(n)的复杂度
6. 对于每个g(x,n)我们可以把g(x,n)分成尽量均匀的两
题意:
求第n个卡特兰数,模3814697265625 (5^18)
限制:
有20组数据,1 <= n <= 1e18
思路:
1. 卡特兰数的表达式:
ans = 1/(n+1) * C(2*n,n)
-> ans = 1/(n+1) * (2n)! / n! / n! ---1式
2. 因为要模5^18,求逆元要求互质,所以先把"1式"中的因子5全部去掉
3. 然后看不含因子5的阶乘,f(n!)
4. 设g(x,n)=(x+1)(x+2)(x+3)(x+4)(x+6)..(x+n)%M,x+d里面的d不是5的倍数
5. 则有f(n!)=g(0,n)*g(0,n/5)*g(0,n/25)*…*g(0,0)%M ---这里需要log(n)的复杂度
6. 对于每个g(x,n)我们可以把g(x,n)分成尽量均匀的两