AtCoder Beginner Contest #034 C問題
久々のAtCoder復習記事です。
久々と言いつつなんだかんだいってC問題は結構埋まってきてます。
https://kenkoooo.com/atcoder/?user=oftonkingdom&rivals=&kind=category
今回解いた問題は全く知らなかった知識(フェルマーの小定理)が出てきたので備忘のために書きます。(記述はあんまり厳密じゃないです!ごめんなさい!)
参考:
AtCoder Beginner Contest 034 解説
フェルマーの小定理について
フェルマーの小定理とは、が素数のとき、以下が成り立つことである。
ここから、以下が言える。
これはつまり、が素数ならば、ある数をで割った余りは、をで割った余りに等しいということ。
combinationを計算するときに活かせるフェルマーの小定理
今後活かせるタイミングは、combinationを計算した結果を素数(1000000007など)で割った結果を求めろと言われたとき。
mod pの世界では、数で割るということはをかけることに等しい。
今回の問題はを1000000007で割った余りが答え。
まず分子については、1000000007で割った値をループを回してかけていけばよい。
分母についてはフェルマーの小定理の変形バージョンにより、各数の乗をで割った余りを、ループを回してかけあわせていけばよい。
提出コード
すごく参考になる記事
けんちょんさん本当にいつもありがとうございます…!