互质数列的变化

时间:2016-01-01 14:54:06

标签: arrays algorithm greatest-common-divisor

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

1 个答案:

答案 0 :(得分:1)

您可以找到每个元素的素数因子分解,然后计算分解中每个素数的元素数。所需的添加数量为 [元素数] - [MAX(素数)]

例如,[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)。如果您需要知道需要添加哪些元素,那么它的因子分解包含最大计数素数。