【问题标题】:Changes in array of coprime numbers互质数数组的变化
【发布时间】:2016-01-01 14:54:06
【问题描述】:

我得到了一个数组,并且必须确定必须对元素进行的最小加法数(ADDITION BY 1),以使它们不再互质(GCD> 1) 我可以递归地检查gcd是否> 1。如果不是,我认为最容易获得的 GCD 是 2,因此我可以将所有奇数加 1 并将 GCD 设为 2,但是对于偶数很少/没有偶数且更容易的情况,这将失败生成其他 GCD,例如 11、33、55 和 76。在这里,我可以将 1 加到 76 并在 1 步中将 GCD 从 1 更改为 11,而不是通过进行 3 次加法并将 GCD 变为 2 来更改 11,33 和 55。 我想知道最有效的方法。检查数组的 GCD 也是 O(nlogn)。

【问题讨论】:

  • 这个问题是否来自编码竞赛/挑战(在线或其他...)?
  • 我想不到。当我在几天前阅读的电子书中偶然发现这一点时,我正在解决 GCD 上的一些问题并学习素因数、欧拉函数等。我想了一会儿,但我根本想不出一个解决方案,这就是我问的原因。
  • 确定你的意思是最小化附加值的总和?
  • 起初我只想找到一种方法来确保它们都不互质,最小化会在最后出现。如果我不想最小化它们,难道不将它们全部转换为偶数吗?这是我想到的第一件事,然后像我提到的那样开发了这些案例,如果有更好的方法可以做到这一点。
  • 我投票结束这个问题作为离题,因为没有尝试解决这个问题,OP 正在要求某人为他解决一个在线编程难题。

标签: arrays algorithm greatest-common-divisor


【解决方案1】:

您可以找到每个元素的素数分解,然后计算分解中有多少元素具有每个素数。需要添加的数量是[Element count] - [MAX(Prime Count)]

例如,[11, 33, 55, 76] 的因式分解为:

11: 11^1
33: 3^1 * 11^1
55:5^1 * 11^1
76: 2^2 * 19^1

素数是:

2:1
3:1
5:1
11:3
19:1

最高计数是 3,有 4 个元素,所以需要 1 个加法(4 - 3)。如果您需要知道需要添加哪些元素,那就是那些因式分解包含最大计数素数的元素。

【讨论】:

  • 我不太明白,你能举个例子吗?
  • 对于每个主要因素,计算它在数组中出现的次数。在您的示例中:11 出现 3 次(这是最大值),因此答案是 4-3 = 1。
  • 例如 11 13 15 这给出的答案是 2,但实际上是 3。这背后的逻辑是什么?
  • 澄清一下,添加意味着添加 1。这是 1 步。
猜你喜欢
  • 2021-10-21
  • 1970-01-01
  • 2016-05-12
  • 1970-01-01
  • 2014-07-18
  • 2014-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多