Pythonでべき乗の剰余(mod)を計算するプログラムの書き方
3つの数値 x、y、z が与えられたとき、(x^y) % z を計算するのがこの記事のテーマです。べき乗の結果は指数が大きくなるほど爆発的に増加するため、剰余を取ることで値を扱いやすい範囲に収めることができます。これは競技プログラミングや暗号処理などでもよく使われる基本的なテクニックです。
例
入力:x = 2, y = 3, p = 3 出力:2
解説: 2^3 % 3 = 8 % 3 = 2 となります。
アルゴリズム
- ステップ1: 3つの数値を入力として受け取る。
- ステップ2: pow() 関数でべき乗を計算し、% 演算子で剰余を求める。
- ステップ3: 結果を画面に表示する。
サンプルコード
x = int(input("Enter First Value ::>"))
y = int(input("Enter Second Value ::>"))
z = int(1e9+7)
# pow関数を使用してべき乗を計算
# その後、%演算子で剰余を求める
d = pow(x, y) % z
print("Value Is=", d)
実行結果
Enter First Value ::> 2 Enter Second Value ::> 3 Value Is= 8
このコードでは、まず x と y を標準入力から受け取り、法(モジュラス)として競技プログラミングで定番の 10^9 + 7 を設定しています。pow(x, y) でべき乗を計算した後、% z で剰余を取って結果を出力します。
より効率的な方法:pow() の第3引数を活用する
実は Python の組み込み関数 pow() は、第3引数に法を指定できるという便利な機能を持っています。pow(x, y, z) と書くだけで、巨大な中間値を生成することなく直接 (x^y) % z を計算できます。
x = int(input("Enter First Value ::>"))
y = int(input("Enter Second Value ::>"))
z = 10**9 + 7
# 3引数版のpow()で直接べき乗剰余を計算
d = pow(x, y, z)
print("Value Is=", d)
この方法には次のようなメリットがあります。
- メモリ効率: 巨大なべき乗の中間結果を保持しないため、メモリ消費を抑えられます。
- 処理速度: 内部で「繰り返し二乗法」が使われているため、指数が非常に大きくても高速に計算できます。
- コードの簡潔さ: 剰余演算を別途書く必要がなく、意図が明確になります。
競技プログラミングでは「答えを 10^9 + 7 で割った余りを求めよ」という問題が頻出です。そのような場面では、3引数版の pow() を使うのが最もシンプルかつ確実な解法となります。
-
Pythonで単利を計算するプログラムの作成方法
この記事では、Python 3.x(およびそれ以前のバージョン)を使用して、単利を計算する方法について解説します。単利とは、元本に対して一定の利率で発生する利息のことです。一般的には、利率に元本を掛け、さらに利息が発生する期間を掛けることで求められます。単利の計算式単利は数学的に以下の式で表すことができます。単利(SI) = (P × T × R) / 100 P:元本(Principal) T:期間(Time) R:利率(Rate)例えば、元本 P = 1000、利率 R = 1%、期間 T = 2 の場合、単利は次のように計算されます。SI = (1000 × 1 × 2) / 100
-
Pythonで選択ソートを実装する方法|仕組みとサンプルコードをわかりやすく解説
この記事では、選択ソート(Selection Sort)の基本的な仕組みと、Python 3.x(およびそれ以前のバージョン)での実装方法について解説します。 選択ソートとは 選択ソートは、ソートされていない部分から最小の要素を繰り返し見つけ出し、先頭側へ移動させることで配列全体を整列していくアルゴリズムです。処理の過程で、対象の配列は次の2つの部分配列に分けられます。 すでにソートが完了している部分配列 まだソートされていない部分配列 選択ソートの各イテレーションでは、未ソートの部分配列から最小要素を取り出し、ソート済みの部分配列の末尾に追加していきます。 アルゴリズムの動作イメー