Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 8c27d86

Browse files
Psytewpatrickwestervelt
and
patrickwestervelt
authored
enhancement: FindLCM algorithm (TheAlgorithms#1222)
Co-authored-by: patrickwestervelt <pwestervelt3@gatech.edu>
1 parent 63a3394 commit 8c27d86

File tree

2 files changed

+44
-8
lines changed

2 files changed

+44
-8
lines changed

‎Maths/FindLcm.js‎

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,18 @@
1111

1212
'use strict'
1313

14+
import { findHCF } from './findHcf'
15+
1416
// Find the LCM of two numbers.
1517
const findLcm = (num1, num2) => {
1618
// If the input numbers are less than 1 return an error message.
1719
if (num1 < 1 || num2 < 1) {
18-
return'Please enter values greater than zero.'
20+
throwError('Numbers must be positive.')
1921
}
2022

2123
// If the input numbers are not integers return an error message.
2224
if (num1 !== Math.round(num1) || num2 !== Math.round(num2)) {
23-
return'Please enter whole numbers.'
25+
throwError('Numbers must be whole.')
2426
}
2527

2628
// Get the larger number between the two
@@ -33,4 +35,19 @@ const findLcm = (num1, num2) => {
3335
}
3436
}
3537

36-
export { findLcm }
38+
// Typically, but not always, more efficient
39+
const findLcmWithHcf = (num1, num2) => {
40+
// If the input numbers are less than 1 return an error message.
41+
if (num1 < 1 || num2 < 1) {
42+
throw Error('Numbers must be positive.')
43+
}
44+
45+
// If the input numbers are not integers return an error message.
46+
if (num1 !== Math.round(num1) || num2 !== Math.round(num2)) {
47+
throw Error('Numbers must be whole.')
48+
}
49+
50+
return num1 * num2 / findHCF(num1, num2)
51+
}
52+
53+
export { findLcm, findLcmWithHcf }

‎Maths/test/FindLcm.test.js‎

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,39 @@
1-
import { findLcm } from '../FindLcm'
1+
import { findLcm,findLcmWithHcf } from '../FindLcm'
22

33
describe('findLcm', () => {
44
it('should throw a statement for values less than 1', () => {
5-
expect(findLcm(0, 0)).toBe('Please enter values greater than zero.')
5+
expect(()=>{findLcm(0, 0)}).toThrow(Error)
66
})
77

88
it('should throw a statement for one value less than 1', () => {
9-
expect(findLcm(1, 0)).toBe('Please enter values greater than zero.')
10-
expect(findLcm(0, 1)).toBe('Please enter values greater than zero.')
9+
expect(()=>{findLcm(1, 0)}).toThrow(Error)
10+
expect(()=>{findLcm(0, 1)}).toThrow(Error)
1111
})
1212

1313
it('should return an error for values non-integer values', () => {
14-
expect(findLcm(4.564, 7.39)).toBe('Please enter whole numbers.')
14+
expect(()=>{findLcm(4.564, 7.39)}).toThrow(Error)
1515
})
1616

1717
it('should return the LCM of two given integers', () => {
1818
expect(findLcm(27, 36)).toBe(108)
1919
})
2020
})
21+
22+
describe('findLcmWithHcf', () => {
23+
it('should throw a statement for values less than 1', () => {
24+
expect(() => { findLcmWithHcf(0, 0) }).toThrow(Error)
25+
})
26+
27+
it('should throw a statement for one value less than 1', () => {
28+
expect(() => { findLcmWithHcf(1, 0) }).toThrow(Error)
29+
expect(() => { findLcmWithHcf(0, 1) }).toThrow(Error)
30+
})
31+
32+
it('should return an error for values non-integer values', () => {
33+
expect(() => { findLcmWithHcf(4.564, 7.39) }).toThrow(Error)
34+
})
35+
36+
it('should return the LCM of two given integers', () => {
37+
expect(findLcmWithHcf(27, 36)).toBe(108)
38+
})
39+
})

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /