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

题面

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

思路

根据二项式定理,

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

那么

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

算 【一本通提高组合数学】 计算系数(NOIP2011提高组) 需要用快速幂.

  • 可以根据组合式的递推公式算组合数.我是这么写的.

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

  • 或者是利用组合数的定义式,但是因为有取余, 所以要用逆元.

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

其中 【一本通提高组合数学】 计算系数(NOIP2011提高组) 为逆元, 这个可以直接用费马小定理, 正好前面写了快速幂, 岂不是美滋滋.

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;
}

上一篇:floyd最小环问题


下一篇:v8 常用js类型