Skip to content

Commit add6e56

Browse files
committed
perf: optimize factor calculation
1 parent 5c39e87 commit add6e56

1 file changed

Lines changed: 23 additions & 3 deletions

File tree

Maths/Factors.js

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,30 @@
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+
*/
1016
const 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

1636
export { factorsOfANumber }

0 commit comments

Comments
 (0)