use proconio::input; const MOD: u64 = 998244353; fn modinv(a: u64, m: u64) -> u64 { pow_mod(a, m - 2, m) } fn pow_mod(mut base: u64, mut exp: u64, m: u64) -> u64 { let mut result = 1u64; base %= m; while exp > 0 { if exp & 1 == 1 { result = result * base % m; } base = base * base % m; exp >>= 1; } result } // C(n, k) where n, k < MOD fn comb_small(n: u64, k: u64) -> u64 { if k > n { return 0; } let k = k.min(n - k); let mut num = 1u64; let mut den = 1u64; for i in 0..k { num = num * (n - i) % MOD; den = den * (i + 1) % MOD; } num * modinv(den, MOD) % MOD } // Lucas の定理: C(n, k) mod p fn lucas(n: u64, k: u64) -> u64 { if k == 0 { return 1; } comb_small(n % MOD, k % MOD) * lucas(n / MOD, k / MOD) % MOD } fn main() { input! { n: u64, k: u64, } println!("{}", lucas(n, k)); }