Pythonで整数が3の累乗かどうかを判定する方法
ある整数 n が与えられたとき、その数が 3 の累乗(べき乗)であるかどうかを判定する問題を考えてみましょう。例えば、n = 27 は 3 の累乗なので結果は true、一方 n = 15 は 3 の累乗ではないため false となります。
この記事では、対数(ログ)を活用したシンプルで効率的な判定方法を解説します。
解法のアプローチ:対数を使う
この問題は、以下の手順で解くことができます。
- 常用対数(log10)を利用して判定を行う
- [log10(n) ÷ log10(3)] の計算結果の小数部分が 0(つまり結果が整数)であれば、n は 3 の累乗であると判定できる
この方法が成り立つ理由は、対数の性質にあります。n = 3k であるとき、log10(n) = k × log10(3) となるため、log10(n) を log10(3) で割ると必ず整数 k になります。逆に 3 の累乗でなければ、割り算の結果は整数にならず小数部分が残ります。
実装例
以下のコードで実際の動作を確認してみましょう。
import math
class Solution(object):
def isPowerOfThree(self, n):
"""
:type n: int
:rtype: bool
"""
if not n or n < 0:
return False
return (math.log10(n) / math.log10(3)) % 1 == 0
ob1 = Solution()
print(ob1.isPowerOfThree(27))
print(ob1.isPowerOfThree(15))
print(ob1.isPowerOfThree(9))入力
27 15 9
出力
true false true
コードのポイント
- 事前チェック: n が 0 または負の値の場合は、3 の累乗になり得ないため即座に False を返します。
- 剰余演算による判定: 計算結果に対して % 1 == 0 を適用することで、小数部分が存在しない(=整数である)ことを確認しています。
- 注意点: 浮動小数点演算には誤差が伴うため、非常に大きな数値を扱う場合は精度の問題が発生する可能性があります。そのようなケースでは、ループで 3 を掛け続けて比較する方法や、最大の 3 の累乗との剰余を利用する方法がより安全です。
-
Pythonで数値が2の累乗かどうかを判定するプログラム
この記事では、以下の問題に対する解決策について詳しく解説します。 問題文 ある整数が与えられたとき、その数が2の累乗であるかどうかを判定する必要があります。 この問題は、主に次の2つのアプローチで解くことができます。 アプローチ1: 繰り返し2で割って判定する 数値を順に2で割っていき、途中で割り切れなくなった場合(奇数が出現した場合)は2の累乗ではありません。最終的に1に到達できれば、その数は2の累乗であると判定できます。なお、0は2の累乗に含まれないため、あらかじめ除外しています。この方法の時間計算量は O(log n) です。 サンプルコード # power of 2 def find(
-
【Python入門】3つの数値から最大値を求める方法
3つの数値 a、b、c が与えられたとき、その中で最も大きい要素(最大値)を見つけるのが今回の課題です。ここでは、Pythonのリストと組み込み関数 max() を使ったシンプルな方法を、初心者向けにわかりやすく解説します。 実行例 入力:a = 2, b = 4, c = 3 出力:4 アルゴリズム ステップ1:ユーザーから3つの数値を入力として受け取る。 ステップ2:3つの数値をリストに格納する。 ステップ3:max() 関数を使ってリスト内の最大値 max(lst) を求める。 ステップ4:最後に最大値を出力する。 サンプルコード def maximum(a, b, c):