File tree 2 files changed +45
-0
lines changed
2 files changed +45
-0
lines changed Original file line number Diff line number Diff line change
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
+ } ;
Original file line number Diff line number Diff line change
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
+ } ) ;
You can’t perform that action at this time.
0 commit comments