Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで整数が4の累乗かどうかを判定する方法【True/Falseを返す関数の実装】

与えられた整数が4の累乗であるかどうかを確認したい場合、整数を引数として受け取る「check_power_of_4」というメソッドを定義するのが一般的です。このメソッドでは、剰余演算子(%)と整数除算演算子(//)を組み合わせて判定を行い、結果に応じて True または False を返します。

サンプルコード

以下に具体的な実装例を示します。

def check_power_of_4(my_val):
   if (my_val == 0):
      return False
   while (my_val != 1):
      if (my_val % 4 != 0):
         return False
      my_val = my_val // 4

   return True

my_num = 64
print("The number to be checked is : ")
print(my_num)

if(check_power_of_4(my_num)):
   print(my_num, 'is a power of 4..')
else:
   print(my_num, 'is not a power of 4..')

出力結果

The number to be checked is :
64
64 is a power of 4..

処理の流れと解説

  • 数値を引数として受け取る「check_power_of_4」メソッドを定義します。

  • 引数の値が 0 の場合は、4の累乗になり得ないため False を返します。

  • 値が 1 になるまでループを回し、その過程で剰余演算子を使って「4で割り切れるか」を確認します。割り切れない場合は False を返します。

  • 割り切れた場合は、// 演算子(整数除算)で値を4で割り続けます。

  • 最終的に値がちょうど1になれば、それは4の累乗だったことになるため True を返します。

  • メソッドの外側で判定対象の数値(ここでは64)を定義し、コンソールに表示します。

  • その数値を引数としてメソッドを呼び出し、判定結果に応じたメッセージを出力します。

補足:計算量について

このアルゴリズムは、1回のループごとに数値が約4分の1になるため、時間計算量は O(log₄ n) となります。非常に効率的な判定方法です。なお、負の数や0は4の累乗にならない点にも注意してください。

別のアプローチ:ビット演算を活用する方法

より高度な方法として、ビット演算を利用する手法もあります。4の累乗は2進数表現において、1の位から数えて奇数番目のビット(1, 5, 9…ビット目)にだけ「1」が立つという特徴があります。以下のように判定できます。

def check_power_of_4_bitwise(n):
    return n > 0 and (n & (n - 1)) == 0 and (n & 0xAAAAAAAA) == 0

この方法では、まず n > 0 で正の数であることを確認し、(n & (n - 1)) == 0 で2の累乗であることを判定した上で、偶数番目のビットに「1」が立っていないことを n & 0xAAAAAAAA == 0 で確認することで、4の累乗かどうかを一発で判別できます。

  1. Pythonの「!=」と「is not」の違いとは?値の比較とオブジェクト同一性の判定方法を解説

    Pythonの「!=」演算子とは? Pythonにおける「!=」は「等しくない(not equal)」を表す比較演算子です。左右のオペランドの値が異なる場合に True を返し、値が等しい場合には False を返します。 >>> (10+2) != 12 # どちらも12なので値は等しい → False False >>> (10+2) == 12 True >>> computer != computer # シングルクォートとダブルクォートは同じ文字列 → False False >>> com

  2. Pythonの「and」と「or」演算子の違いとは?論理演算子の基本をわかりやすく解説

    Pythonにおける論理演算子の基本Pythonでは、「and」「or」(さらに「not」)は論理演算子として定義されています。これらの演算子は、いずれも2つのオペランド(被演算子)を受け取り、それぞれのオペランドは真(True)または偽(False)に評価されます。条件分岐や繰り返し処理の制御において頻繁に使われる重要な構成要素です。and演算子:両方がTrueのときだけTrueを返す「and」演算子は、両方のオペランドがTrueである場合にのみTrueを返します。片方でもFalseであれば、結果は必ずFalseになります。>>> a=50 >>> b=2