mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-07 02:05:08 +08:00
enhancement: FindLCM algorithm (#1222)
Co-authored-by: patrickwestervelt <pwestervelt3@gatech.edu>
This commit is contained in:
@ -11,16 +11,18 @@
|
|||||||
|
|
||||||
'use strict'
|
'use strict'
|
||||||
|
|
||||||
|
import { findHCF } from './findHcf'
|
||||||
|
|
||||||
// Find the LCM of two numbers.
|
// Find the LCM of two numbers.
|
||||||
const findLcm = (num1, num2) => {
|
const findLcm = (num1, num2) => {
|
||||||
// If the input numbers are less than 1 return an error message.
|
// If the input numbers are less than 1 return an error message.
|
||||||
if (num1 < 1 || num2 < 1) {
|
if (num1 < 1 || num2 < 1) {
|
||||||
return 'Please enter values greater than zero.'
|
throw Error('Numbers must be positive.')
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the input numbers are not integers return an error message.
|
// If the input numbers are not integers return an error message.
|
||||||
if (num1 !== Math.round(num1) || num2 !== Math.round(num2)) {
|
if (num1 !== Math.round(num1) || num2 !== Math.round(num2)) {
|
||||||
return 'Please enter whole numbers.'
|
throw Error('Numbers must be whole.')
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the larger number between the two
|
// Get the larger number between the two
|
||||||
@ -33,4 +35,19 @@ const findLcm = (num1, num2) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export { findLcm }
|
// Typically, but not always, more efficient
|
||||||
|
const findLcmWithHcf = (num1, num2) => {
|
||||||
|
// If the input numbers are less than 1 return an error message.
|
||||||
|
if (num1 < 1 || num2 < 1) {
|
||||||
|
throw Error('Numbers must be positive.')
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the input numbers are not integers return an error message.
|
||||||
|
if (num1 !== Math.round(num1) || num2 !== Math.round(num2)) {
|
||||||
|
throw Error('Numbers must be whole.')
|
||||||
|
}
|
||||||
|
|
||||||
|
return num1 * num2 / findHCF(num1, num2)
|
||||||
|
}
|
||||||
|
|
||||||
|
export { findLcm, findLcmWithHcf }
|
||||||
|
@ -1,20 +1,39 @@
|
|||||||
import { findLcm } from '../FindLcm'
|
import { findLcm, findLcmWithHcf } from '../FindLcm'
|
||||||
|
|
||||||
describe('findLcm', () => {
|
describe('findLcm', () => {
|
||||||
it('should throw a statement for values less than 1', () => {
|
it('should throw a statement for values less than 1', () => {
|
||||||
expect(findLcm(0, 0)).toBe('Please enter values greater than zero.')
|
expect(() => { findLcm(0, 0) }).toThrow(Error)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should throw a statement for one value less than 1', () => {
|
it('should throw a statement for one value less than 1', () => {
|
||||||
expect(findLcm(1, 0)).toBe('Please enter values greater than zero.')
|
expect(() => { findLcm(1, 0) }).toThrow(Error)
|
||||||
expect(findLcm(0, 1)).toBe('Please enter values greater than zero.')
|
expect(() => { findLcm(0, 1) }).toThrow(Error)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should return an error for values non-integer values', () => {
|
it('should return an error for values non-integer values', () => {
|
||||||
expect(findLcm(4.564, 7.39)).toBe('Please enter whole numbers.')
|
expect(() => { findLcm(4.564, 7.39) }).toThrow(Error)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should return the LCM of two given integers', () => {
|
it('should return the LCM of two given integers', () => {
|
||||||
expect(findLcm(27, 36)).toBe(108)
|
expect(findLcm(27, 36)).toBe(108)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe('findLcmWithHcf', () => {
|
||||||
|
it('should throw a statement for values less than 1', () => {
|
||||||
|
expect(() => { findLcmWithHcf(0, 0) }).toThrow(Error)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should throw a statement for one value less than 1', () => {
|
||||||
|
expect(() => { findLcmWithHcf(1, 0) }).toThrow(Error)
|
||||||
|
expect(() => { findLcmWithHcf(0, 1) }).toThrow(Error)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should return an error for values non-integer values', () => {
|
||||||
|
expect(() => { findLcmWithHcf(4.564, 7.39) }).toThrow(Error)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should return the LCM of two given integers', () => {
|
||||||
|
expect(findLcmWithHcf(27, 36)).toBe(108)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
Reference in New Issue
Block a user