mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-05 16:26:47 +08:00
enhancement: FindLCM algorithm (#1222)
Co-authored-by: patrickwestervelt <pwestervelt3@gatech.edu>
This commit is contained in:
@ -11,16 +11,18 @@
|
||||
|
||||
'use strict'
|
||||
|
||||
import { findHCF } from './findHcf'
|
||||
|
||||
// Find the LCM of two numbers.
|
||||
const findLcm = (num1, num2) => {
|
||||
// If the input numbers are less than 1 return an error message.
|
||||
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 (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
|
||||
@ -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', () => {
|
||||
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', () => {
|
||||
expect(findLcm(1, 0)).toBe('Please enter values greater than zero.')
|
||||
expect(findLcm(0, 1)).toBe('Please enter values greater than zero.')
|
||||
expect(() => { findLcm(1, 0) }).toThrow(Error)
|
||||
expect(() => { findLcm(0, 1) }).toThrow(Error)
|
||||
})
|
||||
|
||||
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', () => {
|
||||
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