mirror of
https://github.com/trekhleb/javascript-algorithms.git
synced 2025-07-19 04:15:02 +08:00
Add lcm.
This commit is contained in:
@ -20,5 +20,7 @@ describe('euclideanAlgorithm', () => {
|
||||
expect(euclideanAlgorithm(105, 252)).toBe(21);
|
||||
expect(euclideanAlgorithm(1071, 462)).toBe(21);
|
||||
expect(euclideanAlgorithm(462, 1071)).toBe(21);
|
||||
expect(euclideanAlgorithm(462, -1071)).toBe(21);
|
||||
expect(euclideanAlgorithm(-462, -1071)).toBe(21);
|
||||
});
|
||||
});
|
||||
|
@ -1,9 +1,12 @@
|
||||
/**
|
||||
* @param {number} a
|
||||
* @param {number} b
|
||||
* @param {number} originalA
|
||||
* @param {number} originalB
|
||||
* @return {number|null}
|
||||
*/
|
||||
export default function euclideanAlgorithm(a, b) {
|
||||
export default function euclideanAlgorithm(originalA, originalB) {
|
||||
const a = Math.abs(originalA);
|
||||
const b = Math.abs(originalB);
|
||||
|
||||
if (a === 0 && b === 0) {
|
||||
return null;
|
||||
}
|
||||
@ -16,9 +19,14 @@ export default function euclideanAlgorithm(a, b) {
|
||||
return a;
|
||||
}
|
||||
|
||||
// Normally we need to do subtraction (a - b) but to prevent
|
||||
// recursion occurs to often we may shorten subtraction to (a % b).
|
||||
// Since (a % b) is normally means that we've subtracted b from a
|
||||
// many times until the difference became less then a.
|
||||
|
||||
if (a > b) {
|
||||
return euclideanAlgorithm(a - b, b);
|
||||
return euclideanAlgorithm(a % b, b);
|
||||
}
|
||||
|
||||
return euclideanAlgorithm(b - a, a);
|
||||
return euclideanAlgorithm(b % a, a);
|
||||
}
|
||||
|
Reference in New Issue
Block a user