java - 在数组中查找不重复的最大 GCD 总和

标签 java arrays python-3.x algorithm greatest-common-divisor

<分区>

我有一个包含偶数个元素的数组,我必须选择 n/2(n=数组大小),配对并计算它们的 GCD,使得它们的 GCD 之和为最大值,一旦我们使用数组中的这些元素,我们不能再使用它们。

示例 1: `

Input : 8 24 12 16

Output : 20

解释:我们选择两对 (8,16) 和 (12,24),因为它们的 GCD 之和最大。 如果我们选择其他一些对,比如 (8,12) 和 (24,16),它们的 GCD 之和将为 4+4 =8。

示例 2:

Input : 12 10 36 25 36 16

Output: 45

解释:我们选择以下 3 对:(36,36)、(10,25) 和 (12,16),因为它们的 GCD 之和为 36+5+4 = 45。

我们的方法:

for i in range(0,n):
   max = 0;
   for j in range(i+1,n):
      temp = gcd(a[i], a[j]) // standard func to find GCD 
      if(max<temp):
         store i and j
      store max gcd every time and finally make a[i] and a[j] =0 to mark the visited elements

已编辑 约束:最大元素数 = 20,a[i]< 10^9.

您能否建议一种算法来以最少的时间复杂度最佳地满足上述测试用例? 因为我的方法在多个测试用例上都失败了。

最佳答案

这是一条评论,但我还不能发表评论。 通过寻找最大的gcd来解决这个问题是不好的。 以 [8,9,24,36] 为例,最大的 gcd 是 gcd(24,36) = 12,这将得到 gcd(24,36) + gcd(8,9) = 12+1 =13。 然而,最大的和由 gcd(8,24) + gcd(9,36) = 8+9 = 17 给出。

关于java - 在数组中查找不重复的最大 GCD 总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66724573/

相关文章:

java - 从txt文件读取时的错误处理

java - 运行 Selenium webdriver 时 session 未创建异常

python - 读取文本文件并在python中解析

python - 使用 Python 从 JSON API 获取特定值并插入到 Postgresql 中

python - 使用带有 IN 语句的 cx_Oracle (Python 3)

java - 从 Service 异步方法返回值到 Activity

java - JPA 删除 MySql 触发器

python - 在同一地址分配的数组 Cython + Numpy

arrays - 如何在 MATLAB 中创建元胞数组并将所有元素初始化为同一对象?

javascript - 添加到数组中,检查id是否存在并随机更改