素数pを法とする組合せ数
概要
- 組合せ数 の素数 による剰余を求める
- なので、それぞれの による剰余を求めればよい
- と帰納的に求めていくことで を求めることができる
- フェルマーの小定理より なので、両辺を で割ると が言える
- であることから残りは帰納的に求められる
- もしくは、 により帰納的に が求められるので、そこから を求める方法もある
- これら をメモしておくことで、任意の について を(前処理を除き) の計算時間で求めることができる
- 前処理の計算時間は 程度
実装
Comb()
関数は一般化して複数の数を渡すことが可能で、入力 について を計算している
Python3で実装する
Powered by OnlineGDB
Goで実装する
(筆者の知る限りにおいて)Goの標準ライブラリでは を高速に計算できないため、 を計算する手法をとっている