计算N个整数数组中M个连续数的LCM

时间:2012-03-05 05:26:42

标签: arrays math lcm

我遇到了这个问题here。这是今年早些时候举行的编程竞赛 以下是摘要:
给定N个整数的数组,找到所有连续M个整数的LCM 对于例如

Array = [3,5,6,4,8] (hence N = 5)  
M = 3  

输出:

LCM(3,5,6) = 30  
LCM(5,6,4) = 60  
LCM(6,4,8) = 24

实际上有一个解决方案草图here,但我无法理解动态编程部分。
因此,如果有人可以通过一些例子详细阐述相同的解决方案,那将会很棒 一个新的,易于理解的解决方案也将受到赞赏。

1 个答案:

答案 0 :(得分:0)

我无法再访问解决方案(可能链接已损坏?),但这是我要做的: 我希望我的程序像金字塔一样工作。在最下面的一行,我会得到具有给定数字的数组。在上面的每一行上,我将有一个数组,其中一个字段小于下面的数组。它将存储来自下面数组的两个值的LCM。

[   30    ]
[ 15,  30 ]
[3,  5,  6]

通过这种方式,您可以使用递归函数,并且必须构建金字塔的M-1层。这是一个伪代码实现:

rekursivePyramid (Integer[] numbers, Integer height) {
    if (height == 0) return numbers;
    else {
        newNumbers = Integer[numbers.size() - 1];
        for (i=0; i<newNumbers.size(); i++) {
            newNumbers[i] = LCM ( numbers[i], numbers[i+1]);
        }
        return rekursivePyramid( newNumbers, height-1);
    }
}

这将为您提供一个数组,您可以在其中找到第一个字段中前M个数字的最小公倍数,第二个字段中第二个到第M个第一个数字的LCM,等等。