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