1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| const LL mod = 998244353;
LL power(LL a, LL b) { LL res = 1; while (b) { if (b & 1) { res = res * a % mod; } a = a * a % mod; b >>= 1; } return res; }
LL power(LL a, LL b, LL p) { LL res = 1; while (b) { if (b & 1) { res = res * a % p; } a = a * a % p; b >>= 1; } return res; }
LL inv(LL x) { return power(x, mod - 2); }
LL inv(LL x, LL p) { return power(x, p - 2, p); }
LL C(LL a, LL b, LL p) { if (a < b) { return 0; } LL res = 1; for (int i = 1, j = a; i <= b; i++, j--) { res = res * j % p; res = res * inv(i, p) % p; } return res; }
LL lucas(LL a, LL b, LL p) { if (a < p && b < p) { return C(a, b, p); } return C(a % p, b % p, p) * lucas(a / p, b / p, p) % p; }
|