解説
本問では制約上、Mの素因数の指数が1と保証されています。
そのため各素因数ごとにLucasの定理で(RN) mod Piを計算し、中国剰余定理で解を復元すればよいです。
計算量は前計算O(M)・二項係数の計算にO(logNlogM+logM)です。
内訳は以下の通りです。
- 階乗の前計算にO(ΣPi)≤O(ΠPi)=O(M)時間・空間
- 素因数ごとの二項係数の計算にO(ΣlogPiN)≤O(logNlogM)時間・空間
- 中国剰余定理にO(ΣlogPi)=O(logM)時間
なお本問の制約範囲外ですが、抽象化の際にはN,R=0やN<R、M=1のケースに注意してください。
解答例(Python)
解答例では、二項係数が与えられるたびに階乗を計算しています。