RosettaCodeData/Task/Prime-decomposition/Oforth/prime-decomposition.oforth
2016-12-05 23:44:36 +01:00

14 lines
283 B
Text

: 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 ;