File tree Expand file tree Collapse file tree 2 files changed +45
-0
lines changed Expand file tree Collapse file tree 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