二项式定理一步到位:x^n y^m 项系数 = C(k,n)·a^n·b^m mod 10007,组合数 + 快速幂即可。
OJ: roj
题目 ID: 1648
难度:入门
标签:数学二项式定理快速幂组合数
创建: 2026-09-30 23:55
更新: 2026-10-06 01:38
题目描述
给定整数
输入一行 5 个整数
样例输入 1 1 3 1 2 时,3。
思路
由二项式定理,
参考代码
Python 版:
python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-09-30 23:55
# update_at: 2026-09-30 23:55
import sys
from math import comb
MOD = 10007 # 题面指定的模数(是质数,但 k <= 1000 时直接算精确组合数再取模即可)
def coefficient(a: int, b: int, k: int, n: int, m: int) -> int:
"""二项式定理:(ax+by)^k 展开后 x^n y^m 的系数 = C(k,n) * a^n * b^m。"""
return comb(k, n) * pow(a, n, MOD) % MOD * pow(b, m, MOD) % MOD
def solve() -> None:
a, b, k, n, m = map(int, sys.stdin.buffer.read().split())
print(coefficient(a, b, k, n, m))
if __name__ == "__main__":
solve()C++ 版(同一算法):
cpp
/**
* Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
* rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
* rainboy的学习导航网站: https://idx.roj.ac.cn
* create_at: 2026-10-06 01:38
* update_at: 2026-10-06 01:38
*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MOD = 10007; // 题面指定的模数
ll a, b, k, n, m;
// 快速幂:求 p^e mod MOD
ll qpow(ll p, ll e) {
ll ret = 1;
while (e > 0) {
if (e & 1)
ret = ret * p % MOD;
p = p * p % MOD;
e >>= 1;
}
return ret;
}
int main() {
cin >> a >> b >> k >> n >> m;
// 用杨辉三角递推求 C(k, n):c[j] 表示 C(i, j),逐行更新
ll c[1005] = {0};
c[0] = 1;
for (ll i = 1; i <= k; i++)
for (ll j = i; j >= 1; j--)
c[j] = (c[j] + c[j - 1]) % MOD;
// 二项式定理:x^n y^m 项的系数 = C(k,n) * a^n * b^m
ll ans = c[n] * qpow(a, n) % MOD * qpow(b, m) % MOD;
cout << ans << endl;
return 0;
}