假设我们有一个数组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]