はじめに
カテゴリー競プロ初中級者100問では、Qiitaにて@e869120さんがレッドコーダーが教える、競プロ・AtCoder上達のガイドライン【中級編:目指せ水色コーダー!】としてまとめられている100問をPythonで解いています。
全問題の一覧はこちらです
問題
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=NTL_1_B
Pythonでべき乗の計算をする場合は組み込み関数のpowを用いることができます。
ただし、下記のように愚直に実装すると間に合いません。
1 | pow(m,n) % MOD |
これはpow(m,n)が計算途中でとても巨大な数となってしまい、処理に時間がかかるためです。
しかし、合同式の性質からpow(m,n)計算の過程で剰余を取っても問題はありません。この工夫で計算途中で巨大な数になることを防げるはずです。
powにはそのための呼び出し方法が実装されており、pow(m,n,MOD)のように呼び出すことができます。
詳しくは公式リファレンスを参考にして下さい。なお、Pythonのpowは繰り返し二乗法で実装されています。
コード
これらの考察から解答はいたってシンプルなコードになります。
1 | MOD = 10**9+7 |
記事情報
- 投稿日:2020年4月30日
- 最終更新日:2020年5月10日