当前位置: 首页 > 知识库问答 >
问题:

大小>=2的所有子数组中的最大GCD

柯建修
2023-03-14

给定一个数组,编写一个程序以在大小的所有子数组中找到最大 gcd

我的代码:

from fractions import gcd
from functools import reduce
def GCD(arr):
   x = reduce(gcd, arr)
   return x
t = int(input())
for T in range(0, t):
   n = int(input())
   arr = list(map(int, input().split()))
   gcdd = -1
   for i in range(n):
      for j in range(i+2, n):
         gcdd = max(gcdd, GCD(arr[i:j]))
print(gcdd)

它是O(N^2),还能再优化吗?

共有1个答案

苍嘉澍
2023-03-14

我认为max(GCD(子阵列大小

因为

假设有一个数组 a,b,c,d

那么GCD(a,b,c) = GCD(GCD(a,b),c)

平均GCD(a,b,c)

意味着没有必要计算大小大于2的GCD,如果你增加子数组的大小,GCD保持恒定或减少。没有情况,如果你增加大小,那么GCd增加。

计算大小为 2 的子数组的 GCD 是 O(2*N),它几乎等于 O(N)。

我想你明白我想说什么。

 类似资料:
  • 问题内容: 上下文:我正在构建一个读取rss feed并在后台更新/检查feed的小站点。我有一个数组来存储要显示的数据,另一个数组来存储已显示的记录的ID。 问题:在事情变慢或变慢之前,数组可以在Javascript中容纳多少个项目。我没有对数组进行排序,但是正在使用jQuery的inArray函数进行比较。 该网站将保持运行状态,并进行更新,并且不太可能经常重启/刷新浏览器。 如果我想从数组中

  • 问题内容: Java数组可以包含的元素数量是否有限制?如果是这样,那是什么? 问题答案: 即使测试很容易,也没有找到正确的答案。 在最新的HotSpot VM中,正确的答案是。一旦超出此范围: 你得到:

  • 给出了一个由N个整数组成的数组。 数组的最大和是该数组的非空连续子数组的元素的最大和。 例如,数组[1,-2,3,-2,5]的最大和是6,因为子数组[3,-2,5]的和是6,并且不可能实现更大的子数组和。 现在,您只能从给定数组中删除一个以上的元素。这样做可以得到的结果数组的最大可能最大和是多少? 我正在用我自己的测试用例测试我的代码。我在Dev-C++上得到了正确的输出。但是当我在网上测试我的代

  • 我需要找到总和大于或等于< code>k的最小子阵列长度。数组将只有正数。 例如 输入:< code>target = 7,< code>nums = [2,3,1,2,4,3]输出:2说明:子数组[4,3]在问题约束下长度最小。 在我的代码中,对于输入:< code>target = 7,< code>nums = [2,3,1,2,4,3]我得到的答案是< code>3,但正确答案是< cod

  • 问题内容: 假设我们有一个整数数组:a = {2,4,3,5} 我们有k = 3。 我们可以将数组a拆分为k(3)个子数组,其中数组的顺序无法更改。每个子阵列的总和必须尽可能低,以使所有子阵列之间的最大总和尽可能低。 对于上述解决方案,这将给出{2,4},{3},{5},其最大和为6(4 + 2)。 错误的答案将是{2},{4、3},{5},因为在这种情况下,最大总和为7(4 + 3)。 我尝试创