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

Pythonのすべてのペアのgcd()から元の番号を検索します


別の配列の要素の可能なすべてのペアのGCDが与えられている配列Aがあるとすると、与えられたGCD配列の計算に使用される元の数値を見つける必要があります。

したがって、入力がA =[6、1、1、13]の場合、gcd(13、13)は13、gcd(13、6)は1、gcd( 6、13)は1、gcd(6、6)は6

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

  • n:=Aのサイズ

  • 配列Aを降順で並べ替えます

  • オカレンス:=サイズA[0]の配列で0で埋める

  • 0からnの範囲のiの場合、実行

    • オカレンス[A[i]]:=オカレンス[A [i]] + 1

  • サイズ:=nの平方根の整数

  • res:=Aのサイズと同じサイズの配列で、0で埋める

  • l:=0

  • 0からnの範囲のiの場合、実行

    • オカレンス[A[i]]>0の場合、

      • res [l]:=A [i]

      • オカレンス[res[l]]:=オカレンス[res [l]]-1

      • l:=l + 1

      • 0からlの範囲のjについては、次のようにします

        • iがjと同じでない場合、

          • g:=gcd(A [i]、res [j])

          • オカレンス[g]:=オカレンス[g]-2

  • res[インデックス0からサイズ]を返す

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

from math import sqrt, gcd
def get_actual_array(A):
   n = len(A)
   A.sort(reverse = True)
   occurrence = [0 for i in range(A[0] + 1)]
   for i in range(n):
      occurrence[A[i]] += 1
   size = int(sqrt(n))
   res = [0 for i in range(len(A))]
   l = 0
   for i in range(n):
      if (occurrence[A[i]] > 0):
         res[l] = A[i]
         occurrence[res[l]] -= 1
         l += 1
         for j in range(l):
            if (i != j):
               g = gcd(A[i], res[j])
               occurrence[g] -= 2
   return res[:size]
A = [6, 1, 1, 13]
print(get_actual_array(A))

入力

[6, 1, 1, 13]

出力

[13, 6]

  1. 2つのソートされた配列から最も近いペアを見つけるためのPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 − 2つの配列が与えられたので、2つのソートされた配列から最も近いペアを見つける必要があります 次に、以下の実装のソリューションを見てみましょう- 例 # sys module import sys # pair def print_(ar1, ar2, m, n, x):    # difference    diff=sys.maxsize    # index    l = 0    r = n-1 &

  2. Pythonで文字列から10進数を抽出する

    RegExモジュールを使用するのが最速の方法です。 >>> import re 文字列に整数と浮動小数点数、および以下が含まれていると仮定します- s =私の年齢は25歳です。55.50パーセントのマークがあり、9764135408が私の番号です findall()関数は、小数点の前後の数字を含む、指定されたパターンに一致する数値のリストを返します >>> re.findall('\d*\.?\d+',s) 結果はすべての番号のリストオブジェクトです ['25', '55.50', '9764