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

PythonでサブセットのビットごとのANDが2の累乗であるかどうかを確認します


numsと呼ばれる数値の配列があるとします。ビット単位のANDが2の累乗であるnumのサブセットが存在するかどうかを確認する必要があります。

したがって、入力がnums =[22、25、9]のような場合、出力はTrueになります。サブセット{22、9}として、バイナリ形式は{10110、1001}であり、これら2つのANDは10000=16です。これは2の累乗です。

これを解決するには、次の手順に従います-

  • MAX:=最大で32ビットの数値があることを考慮して32
  • 関数solve()を定義します。これには数がかかります
  • numsのサイズが1の場合、
    • nums [0]が2の累乗の場合はtrueを返し、それ以外の場合はfalseを返します
  • 合計:=0
  • 0からMAX-1の範囲のiの場合は
    • 合計:=合計または2 ^ i
  • 0からMAX-1の範囲のiの場合は
    • ret:=合計
    • 0からnumsのサイズの範囲のjについては、
      • nums [j] AND(2 ^ i)がゼロ以外の場合、
        • ret:=ret AND nums [j]
    • retが2の累乗の場合、
      • Trueを返す
  • Falseを返す

理解を深めるために、次の実装を見てみましょう-

MAX = 32
def is_2s_pow(v):
   return v and (v & (v - 1)) == 0
def solve(nums):
   if len(nums) == 1:
      return is_2s_pow(nums[0])
      total = 0
   for i in range(0, MAX):
      total = total | (1 << i)
   for i in range(0, MAX):
      ret = total
      for j in range(0, len(nums)):
         if nums[j] & (1 << i):
            ret = ret & nums[j]
      if is_2s_pow(ret):
         return True
   return False
nums = [22, 25, 9]
print(solve(nums))

入力

[22, 25, 9]

出力

True

  1. Pythonで2つの三角形の合同をチェックするプログラム

    このチュートリアルでは、2つの三角形の合同性を確認します。 SSS、SAS、AAAをチェックします。三角形の類似性は、これらの基準に基づいて証明されます。 定理に基づいてさまざまな条件をチェックする必要があります。以下のコードでそれらを確認してください。 例 def side_side_side(sides_one, sides_two):    # sorting same pace    sides_one.sort()    sides_two.sort()    # checking the condit

  2. いいえが2の累乗であるかどうかを調べるPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −数値が与えられているので、その数値が2の累乗であるかどうかを確認する必要があります。 これは、以下で説明する2つのアプローチを使用して解決できます。 アプローチ1:2進数で指定された数値の対数を取り、電力を取得します 例 # power of 2 def find(n):    if (n == 0):       return False    while (n != 1):       if (n %