File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 77 *
88 */
99
10+ /**
11+ * Finds every positive factor of a number in ascending order.
12+ *
13+ * Time complexity: O(sqrt(number))
14+ * Space complexity: O(k), where k is the number of factors
15+ */
1016const factorsOfANumber = ( number = 0 ) => {
11- return Array . from ( Array ( number + 1 ) . keys ( ) ) . filter (
12- ( num ) => number % num === 0
13- )
17+ if ( ! Number . isInteger ( number ) || number <= 0 ) return [ ]
18+
19+ const lowerFactors = [ ]
20+ const upperFactors = [ ]
21+
22+ for ( let divisor = 1 ; divisor <= number / divisor ; divisor ++ ) {
23+ if ( number % divisor !== 0 ) continue
24+
25+ lowerFactors . push ( divisor )
26+
27+ const pairedDivisor = number / divisor
28+ if ( pairedDivisor !== divisor ) {
29+ upperFactors . push ( pairedDivisor )
30+ }
31+ }
32+
33+ return lowerFactors . concat ( upperFactors . reverse ( ) )
1434}
1535
1636export { factorsOfANumber }
You can’t perform that action at this time.
0 commit comments