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 dc67506

Browse files
merge: Add pronic number implementation (#1023)
* feat: Add pronic number implementation * Add test to Math * Minor fixes * Minor style fixes * refactor: Store square root in a variable * Minor refactoring * fix: Change pronic number check logic Reduced time complexity from O(sqrt(n)) to O(1) * Minor style fixes * fix: Update pronic number check boolean equation * refactor: Change pronic number check condition * refactor: Add tests to Math * Minor style fixes * refactor: Change unit test logic
1 parent d28ae8b commit dc67506

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

‎Maths/IsPronic.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/*
2+
* Author: Akshay Dubey (https://github.com/itsAkshayDubey)
3+
* Pronic Number: https://en.wikipedia.org/wiki/Pronic_number
4+
* function to check if number is pronic.
5+
* return true if number is pronic.
6+
* else false
7+
*/
8+
9+
/**
10+
* @function isPronic
11+
* @description -> Checking if number is pronic using product of two consecutive numbers
12+
* If number is a product of two consecutive numbers, then it is pronic
13+
* therefore, the function will return true
14+
*
15+
* If number is not a product of two consecutive numbers, then it is not pronic
16+
* therefore, the function will return false
17+
* @param {number} number
18+
* @returns {boolean}
19+
*/
20+
21+
export const isPronic = (number) => {
22+
if (number === 0) {
23+
return true
24+
}
25+
const sqrt = Math.sqrt(number)
26+
return sqrt % 1 !== 0 && Math.ceil(sqrt) * Math.floor(sqrt) === number
27+
}

‎Maths/test/IsPronic.test.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { isPronic } from '../IsPronic'
2+
3+
const pronicNumbers = [0, 2, 6, 12, 20, 30, 42, 56, 72, 90, 110, 132, 156, 182, 210, 240, 272, 306, 342, 380, 420, 462, 506, 552, 600, 650, 702, 756, 812, 870, 930, 992, 1056, 1122, 1190, 1260, 1332, 1406, 1482, 1560, 1640, 1722, 1806, 1892, 1980, 2070, 2162, 2256, 2352, 2450, 2550]
4+
5+
describe('Testing isPronic function', () => {
6+
for (let i = 0; i <= 2500; i++) {
7+
it('should return true', () => {
8+
const isPronicNumber = isPronic(i)
9+
expect(isPronicNumber).toBe(pronicNumbers.includes(i))
10+
})
11+
}
12+
})

0 commit comments

Comments
(0)

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