RosettaCodeData/Task/Prime-decomposition/Oforth/prime-decomposition.fth
2023-07-01 13:44:08 -04:00

14 lines
284 B
Forth

: factors(n) // ( aInteger -- aList )
| k p |
ListBuffer new
2 ->k
n nsqrt ->p
while( k p <= ) [
n k /mod swap ifZero: [
dup ->n nsqrt ->p
k over add continue
]
drop k 1+ ->k
]
n 1 > ifTrue: [ n over add ]
dup freeze ;