Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
173663 | 徐启善(C班) | 组合数的高精度算法 | C++ | 无测评数据 | 0 | 0 MS | 0 KB | 780 | 2024-08-20 23:15:40 |
#include <bits/stdc++.h> using namespace std; const long long mod = 1e9 + 7; long long zhs(int n, int k) { long long ans = 1; for (int i = 0; i < k; ++i) { ans = ans * n % mod; --n; } return ans; } long long jc(long long a, long long b, long long p) { long long ans = 1; while (b) { if (b & 1) { ans = ans * a % p; } a = a * a % p; b >>= 1; } return ans; } long long inverse(int n, int p) { return jc(n, p - 2, p); } long long c(int n, int k) { if (k > n) { return 0; } return zhs(n, k) * inverse(zhs(k, k), mod) % mod; } int main() { int n, k; cin >> n >> k; cout << c(n + k - 2, n - 1) << endl; return 0; }