mirror of
https://github.moeyy.xyz/https://github.com/trekhleb/javascript-algorithms.git
synced 2024-11-10 11:09:43 +08:00
resolved 1154 issue - array-lcm
This commit is contained in:
parent
ca3d16dcce
commit
a4dd3bd213
26
src/algorithms/math/lcm-array/_test_/lcm-array.test.js
Normal file
26
src/algorithms/math/lcm-array/_test_/lcm-array.test.js
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
import leastCommonMultipleArray from '../lcm-array.js';
|
||||||
|
|
||||||
|
describe('leastCommonMultiple', () => {
|
||||||
|
it('should find least common multiple', () => {
|
||||||
|
expect(() => leastCommonMultipleArray([])).toThrow(Error('Array is empty'));
|
||||||
|
expect(leastCommonMultipleArray([0, 0])).toBe(0);
|
||||||
|
expect(leastCommonMultipleArray([1, 0])).toBe(0);
|
||||||
|
expect(leastCommonMultipleArray([0, 1])).toBe(0);
|
||||||
|
expect(leastCommonMultipleArray([4, 6])).toBe(12);
|
||||||
|
expect(leastCommonMultipleArray([6, 21])).toBe(42);
|
||||||
|
expect(leastCommonMultipleArray([7, 2])).toBe(14);
|
||||||
|
expect(leastCommonMultipleArray([3, 5])).toBe(15);
|
||||||
|
expect(leastCommonMultipleArray([7, 3])).toBe(21);
|
||||||
|
expect(leastCommonMultipleArray([1000000, 2])).toBe(1000000);
|
||||||
|
expect(leastCommonMultipleArray([-9, -18])).toBe(18);
|
||||||
|
expect(leastCommonMultipleArray([-7, -9])).toBe(63);
|
||||||
|
expect(leastCommonMultipleArray([-7, 9])).toBe(63);
|
||||||
|
expect(leastCommonMultipleArray([2, 3, 5])).toBe(30);
|
||||||
|
expect(leastCommonMultipleArray([2, 4, 5])).toBe(20);
|
||||||
|
expect(leastCommonMultipleArray([2, 4, 6, 8])).toBe(24);
|
||||||
|
expect(leastCommonMultipleArray([2, 4, 6, 7, 8])).toBe(168);
|
||||||
|
expect(leastCommonMultipleArray([2, 3, 5, 7, 11, 13, 17, 19])).toBe(
|
||||||
|
9699690
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
16
src/algorithms/math/lcm-array/lcm-array.js
Normal file
16
src/algorithms/math/lcm-array/lcm-array.js
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import euclideanAlgorithm from '../euclidean-algorithm/euclideanAlgorithm.js';
|
||||||
|
|
||||||
|
export default function leastCommonMultipleArray(arr) {
|
||||||
|
let siz = arr.length;
|
||||||
|
if (siz == 0) throw new Error('Array is empty');
|
||||||
|
for (let num of arr) {
|
||||||
|
if (num == 0) return 0;
|
||||||
|
}
|
||||||
|
let lcm = arr[0];
|
||||||
|
for (let i = 0; i < siz; i++) {
|
||||||
|
let prod = Math.abs(lcm * arr[i]);
|
||||||
|
let gcd = euclideanAlgorithm(lcm, arr[i]);
|
||||||
|
lcm = prod / gcd;
|
||||||
|
}
|
||||||
|
return lcm;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user