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

【Python入門】整数nが3の累乗であるかどうかを判定してTrue/Falseを返す方法

Pythonでは、ある整数が3の累乗(3のべき乗)であるかどうかを簡単に判定できます。本記事では、整数nを受け取り、それが3の累乗であればTrueを、そうでなければFalseを返す関数の実装方法を解説します。

判定の考え方

3の累乗とは、3を何度も掛け合わせた数(1, 3, 9, 27, 81, 243…)のことです。判定には以下の性質を利用します。

  • 0は3の累乗ではない
  • 3の累乗は必ず3で割り切れる(ただし1を除く)
  • 3で割り続けて最終的に1になれば、それは3の累乗である

この処理には、剰余演算子「%」と整数除算演算子「//」を使用します。

サンプルコード

以下に実装例を示します。

def check_power_of_3(my_val):
   if (my_val == 0):
      return False
   while (my_val != 1):
      if (my_val % 3 != 0):
         return False
      my_val = my_val // 3

   return True

my_num = 81
print("チェックする数値 : ")
print(my_num)
if(check_power_of_3(my_num)):
   print(my_num, 'は3の累乗です')
else:
   print(my_num, 'は3の累乗ではありません')

実行結果

チェックする数値 : 
81
81 は3の累乗です

コードの解説

  • check_power_of_3という名前の関数を定義し、判定したい整数を引数として受け取ります。

  • 引数の値が0の場合は、その時点でFalseを返します(0は3の累乗ではないため)。

  • 値が1になるまでループを回し、その過程で% 3による剰余計算を行います。剰余が0でなければ3で割り切れないため、Falseを返します。

  • 割り切れた場合は、「//」演算子を使って値を3で整数除算し、処理を繰り返します。

  • ループを抜けて値が1になっていれば、それは3の累乗なのでTrueを返します。

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

  • その数値を引数として関数を呼び出し、戻り値に応じて結果を出力します。

補足:負の数への対応について

上記のコードは正の整数を前提としています。負の数や非整数を扱う場合は、事前に値の検証を追加することをおすすめします。また、より簡潔に判定したい場合は、数学的な性質を利用した次のようなワンライナーも有効です。

def check_power_of_3(n):
    return n > 0 and 1162261467 % n == 0
# 1162261467 = 3^19(32bit整数の範囲内で最大の3の累乗)

この方法では、3の累乗の約数は必ず3の累乗であるという性質を利用しているため、高速に判定できます。

  1. Pythonのany()とall()関数とは?違いと使い方を徹底解説

    Pythonには、「AND」「OR」の論理演算に相当する処理を行うための組み込み関数として、all()とany()が用意されています。これらの関数を使うことで、リストやタプルなどのイテラブルの中身を簡潔に判定できます。 Pythonのany()関数 any()関数は、イテラブル内の要素が1つでも真(True)であればTrueを返し、それ以外はFalseを返します。イテラブルが空の場合もFalseを返します。 構文 any(iterable) 引数には、リスト・タプル・辞書などのイテラブルオブジェクトを指定します。 例1:リストの場合 >>> mylst = [False,

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

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