【一本通提高组合数学】 计算系数(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;
}
标签:系数,NOIP2011,int,sum,long,ans,ksm,提高,mod 来源: https://blog.csdn.net/hello_wangping/article/details/122768515