在Python中每对从gcd()查找原始数字
假设我们有一个数组A,其中给出了另一个数组的每对可能的元素对的GCD,我们必须找到用于计算给定GCD数组的原始数字。
因此,如果输入类似于A=[6,1,1,13],则输出将为[13,6],因为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
size:=n的平方根的整数
res:=一个与A大小相同的数组,并用0填充
l:=0
对于0到n范围内的i,执行
res[l]:=A[i]
事件[res[l]]:=事件[res[l]]-1
l:=l+1
对于j在0到l范围内,执行
g:=gcd(A[i],res[j])
出现[g]:=出现[g]-2
如果我和j不一样
如果出现[A[i]]>0,则
返回res[从索引0到size]
示例
让我们看下面的实现以更好地理解-
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]