8000 feat: add perfect number (#221) · TheAlgorithms/TypeScript@296e4a5 · GitHub
[go: up one dir, main page]

Skip to content

Commit 296e4a5

Browse files
authored
feat: add perfect number (#221)
* feat: add perfect numbers * Optimize isPerfectNumber function and update tests
1 parent 9bea135 commit 296e4a5

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed

maths/perfect_number.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/**
2+
* @function isPerfectNumber
3+
* @abstract A function to determine if a number is a perfect number
4+
* @param {number} n
5+
*
6+
* @example console.log(isPerfectNumber(6)) => true
7+
* @example console.log(isPerfectNumber(28)) => true
8+
* @example console.log(isPerfectNumber(12))=> false
9+
*/
10+
11+
export const isPerfectNumber = (n: number): boolean => {
12+
if (n <= 0 || !Number.isInteger(n)) {
13+
return false;
14+
}
15+
let sum = 1;
16+
let sqrt = Math.sqrt(n);
17+
for (let i = 2; i < sqrt; i++) {
18+
if (n % i === 0) {
19+
sum += i + n / i;
20+
}
21+
}
22+
if (sqrt === Math.floor(sqrt)) {
23+
sum += sqrt;
24+
}
25+
26+
return sum === n;
27+
};

maths/test/perfect_numbers.test.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { isPerfectNumber } from "../perfect_number";
2+
3+
describe('perfect Numbers tests', () => {
4+
it.each([
5+
[6, true],
6+
[28, true],
7+
[496, true],
8+
[8128, true],
9+
[12, false],
10+
[42, false],
11+
[100, false],
12+
[0, false],
13+
[-1, false],
14+
[1.5, false],
15+
])('The return value of %i should be %s', (n, expectation) => {
16+
expect(isPerfectNumber(n)).toBe(expectation);
17+
});
18+
});

0 commit comments

Comments
 (0)
0