0
点赞
收藏
分享

微信扫一扫

【一本通提高组合数学】 计算系数(NOIP2011提高组)

小布_cvg 2022-02-02 阅读 56

题面

思路

根据二项式定理,

那么

算 a^n,b^m 需要用快速幂.

  • 可以根据组合式的递推公式算组合数.我是这么写的.
  • 或者是利用组合数的定义式,但是因为有取余, 所以要用逆元.

其中 [m!(n-m)!]^{-1} 为逆元, 这个可以直接用费马小定理, 正好前面写了快速幂, 岂不是美滋滋.

Code

#include <bits/stdc++.h>
using namespace std;
long long mod = 10007;
int a, b, k, n, m;
long long ans = 0;

long long ksm(long long a, long long b)
{
	long long sum = 1;
	a %= mod;
	while (b)
	{
		if (b & 1)
			sum = sum * a % mod;
		a = a * a % mod;
		b = b >> 1;
	}
	return sum;
}

int main()
{
	cin >> a >> b >> k >> n >> m;
	ans = ksm(a, n) * ksm(b, m) % mod;
	for (int i = 1, j = k; i <= n; i++, j--)
	{
		ans = ans * j % mod;
		ans = ans * ksm(i, mod - 2) % mod;
	}
	cout << ans << endl;
	return 0;
}

举报

相关推荐

0 条评论