在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]