队内赛 T2数学巡回的梦魇之神喜欢数列

Posted SSL_ZZL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了队内赛 T2数学巡回的梦魇之神喜欢数列相关的知识,希望对你有一定的参考价值。

巡回的梦魇之神喜欢数列

队内赛 T2 巡回的梦魇之神喜欢数列


题目

输入输出样例
输入 #1

3
3 2
4 5
5 10

输出 #1

4
70
2002

输入 #2

10
548663 274643
691753 303423
272071 784649
445453 338151
943278 472896
935376 506928
466125 884296
645556 201996
901126 364020
729913 617772

输出 #2

940823646
795574192
329639602
510984487
583021519
374869018
732112691
34420445
555105650
285447896


解题思路

先将 a 1 , 2 , 3 , . . . a_{1,2,3,...} a1,2,3,...的式子拆一下( a 1 = k , a 2 = k 2 ( k + 1 ) , a 3 = k 3 ( k 2 ( k + 1 ) + k + 1 ) , . . . a_1 = k, a_2 = \\frac{k}{2}(k + 1), a_3 = \\frac{k}{3}(\\frac{k}{2}(k + 1) + k + 1),... a1=k,a2=2k(k+1),a3=3k(2k(k+1)+k+1),...)
把分数合并一下( a 1 = k 1 , a 2 = k 2 ∗ ( k + 1 ) , a 3 = k 3 ( k + 1 ) ∗ k + 2 2 , . . . a_1=\\frac{k}{1}, a_2 = \\frac{k}{2}*(k+1), a_3 = \\frac{k}{3}(k + 1)*\\frac{k+2}{2},... a1=1k,a2=2k(k+1),a3=3k(k+1)2k+2,...)

a n = k n ∗ k + 1 1 ∗ k + 2 2 ∗ . . . ∗ k + n − 1 n − 1 = k ∗ ( k + 1 ) ∗ ( k + 2 ) ∗ . . . ∗ ( k + n − 1 ) 1 ∗ 2 ∗ 3 ∗ . . . ∗ n a_n = \\frac{k}{n}*\\frac{k+1}{1}*\\frac{k+2}{2}*...*\\frac{k+n-1}{n-1}=\\frac{k * (k + 1) * (k + 2)*...*(k+n-1)}{1*2*3*...*n} an=nk1k+12k+2...n1k+n1=123...nk(k+1)(k+2)...(k+n1)
分母为 n 的阶乘,分子其实就是 (k + n - 1)! / (k - 1)!
因为要%所以要用逆元

这题不能用线性求逆元,因为阶乘很大,导致 inv[] 下标会超,所以只能实时求逆元
复杂度O(T·lgn)


Code

#include <bits/stdc++.h>
#define P 1000000007
#define N 10000100
#define ll unsigned long long

using namespace std;

ll jc[N], inv[N];
ll T, n, k;

ll ksm(ll a, ll b) {
	ll ans = 1;
	for(; b; b >>= 1, a = a * a % P)
		if(b & 1) ans = ans * a % P;
	return ans;
}

int main() {
	jc[0] = jc[1] = 1;
	inv[1] = 1;
	for(int i = 2; i <= N - 100; i ++)
		jc[i] = jc[i - 1] * i % P;
	scanf("%lld", &T);
	while(T --) {
		scanf("%lld %lld", &n, &k);
		printf("%lld\\n", jc[k + n - 1] * ksm(jc[k - 1], P - 2) % P * ksm(jc[n], P - 2) % P);
	}
} 

以上是关于队内赛 T2数学巡回的梦魇之神喜欢数列的主要内容,如果未能解决你的问题,请参考以下文章

队内赛 T2DP矩阵乘法快速幂网格游走

队内赛T2结论题看错题的产物改编而来的产物

队内赛 T1数学暴力多项式滚出OI

某种数列问题 (一场欢乐赛的T2)

队内赛 T3区间DP大哥扛纵连

队内ACM赛