在 Python 中通过 gcd() 查找每对元素的原始数字
pythonserver side programmingprogramming更新于 2025/10/10 22:36:17
假设我们有一个数组 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 进行排序
occurrence := 一个数组大小为 A[0] 并用 0 填充
对于范围为 0 到 n 的 i,执行
occurrence[A[i]] := appearance[A[i]] + 1
size := n 平方根的整数
res := 大小与 A 大小相同的数组并用 0 填充
l := 0
对于范围为 0 到 n 的 i,执行
if appearance[A[i]] > 0,则
res[l] := A[i]
occurrence[res[l]] := appearance[res[l]] - 1
l := l + 1
对于 j 在 0 到 l 范围内的情况,执行
如果 i 与 j 不同,则
g := gcd(A[i], res[j])
occurrence[g] := appearance[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]
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

