Skip to main content

library_checker/enumerative_combinatorics/
binomial_coefficient_prime_mod.rs

1#[doc(no_inline)]
2pub use competitive::num::mint_basic::DynMIntU32;
3use competitive::{math::MemorizedFactorial, prelude::*};
4
5#[verify::library_checker("binomial_coefficient_prime_mod")]
6pub fn binomial_coefficient_prime_mod(reader: impl Read, mut writer: impl Write) {
7    let s = read_all_unchecked(reader);
8    let mut scanner = Scanner::new(&s);
9    scan!(scanner, t, m: u32, nk: [(usize, usize); t]);
10    DynMIntU32::set_mod(m);
11    let max_n = nk.iter().map(|(n, _)| n).max().cloned().unwrap_or_default();
12    let f = MemorizedFactorial::new(max_n);
13    for (n, k) in nk {
14        let ans: DynMIntU32 = f.combination(n, k);
15        iter_print!(writer, ans);
16    }
17}