結果
| 問題 | No.2613 Sum of Combination |
| コンテスト | |
| ユーザー |
Sh1n3zZ
|
| 提出日時 | 2024-01-19 22:05:35 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 965 bytes |
| 記録 | |
| コンパイル時間 | 1,709 ms |
| コンパイル使用メモリ | 168,244 KB |
| 実行使用メモリ | 13,880 KB |
| 最終ジャッジ日時 | 2024-09-28 04:30:33 |
| 合計ジャッジ時間 | 7,770 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 TLE * 1 |
| other | -- * 49 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = 2e5 + 5;
const int MOD = 998244353;
ll fac[MAXN], inv[MAXN];
ll qpow(ll a, ll b, ll mod) {
ll res = 1;
while(b) {
if(b & 1) res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res;
}
void init(int p) {
fac[0] = 1;
for(int i = 1; i <= p; ++i) fac[i] = fac[i - 1] * i % p;
inv[p - 1] = qpow(fac[p - 1], p - 2, p);
for(int i = p - 2; i >= 0; --i) inv[i] = inv[i + 1] * (i + 1) % p;
}
ll C(ll n, ll m, ll p) {
if(m > n || m < 0) return 0;
return fac[n] * inv[m] % p * inv[n - m] % p;
}
ll Lucas(ll n, ll m, ll p) {
if(!m) return 1;
return C(n % p, m % p, p) * Lucas(n / p, m / p, p) % p;
}
int main() {
ll n, p;
scanf("%lld%lld", &n, &p);
init(p);
ll ans = 0;
for(ll i = 0; i <= n; ++i) {
ans = (ans + Lucas(n, i, p)) % MOD;
}
printf("%lld\n", ans);
return 0;
}
Sh1n3zZ