首页 > 代码库 > FCC 中级算法题 最小公倍数

FCC 中级算法题 最小公倍数

Smallest Common Multiple


找出能被两个给定参数和它们之间的连续数字整除的最小公倍数。

范围是两个数字构成的数组,两个数字不一定按数字顺序排序。

例如对 1 和 3 —— 找出能被 1 和 3 和它们之间所有数字整除的最小公倍数。

Smallest Common Multiple

思路:

(1)找出所给值的最大值和最小值;

(2)给最大值分别乘以1到100000装入数组maxArr中;

(3)将所给的两个数值及其中间的数按顺序装入数组newArr中;

(4)将最大值的倍数分别和newArr的各个数值相除,然后比较;

(5)返回第一个能把newArr所有元素整除的最小值;

知识点:

(1)Math.max.apply(null, Array)函数可以找出一组数的最大值;

(2)这个数值可以自由设定,本来想让他为newArr各个元素相乘的数值,但有时候数值太大,容易引起崩溃;

 

1  for (var k = 0; k < 100000; k++) {
2        //给最大值乘以1到100000装入数组maxArr中
3          maxArr.push(max * (k + 1));
4      }

 

 

 

代码:

 1 function smallestCommons(arr) {
 2     var newArr = [];
 3     var maxArr = [];
 4     var num = 1;
 5     var max = Math.max.apply(null, arr);
 6     var min = Math.min.apply(null, arr);
 7 
 8 
 9     for (var k = 0; k < 100000; k++) {
10       //给最大值乘以1到100000装入数组maxArr中
11         maxArr.push(max * (k + 1));
12     }
13     for (var i = min; i < max + 1; i++) {
14       //将所给的两个数值及其中间的数按顺序装入数组newArr中
15         newArr.push(i);
16     }
17 
18     for (var j = 0; j < maxArr.length; j++) {
19         var b = 1;
20         for (var m = 0; m < newArr.length; m++) {
21           //将最大值的倍数分别和newArr的各个数值相除,然后比较
22             if (maxArr[j] % newArr[m] !== 0) {
23                 b = 0;
24             }
25         }
26         if (b === 1) {
27           //返回第一个能把newArr所有元素整除的最小值
28             return maxArr[j];
29         }
30     }
31 }
32 smallestCommons([1, 13]);

 

FCC 中级算法题 最小公倍数