RosettaCodeData/Task/Prime-decomposition/SequenceL/prime-decomposition-1.seque...

12 lines
452 B
Plaintext

isPrime(n) := n = 2 or (n > 1 and none(n mod ([2]++((1...floor(sqrt(n)/2))*2+1)) = 0));
primeFactorization(num) := primeFactorizationHelp(num, []);
primeFactorizationHelp(num, current(1)) :=
let
primeFactors[i] := i when num mod i = 0 and isPrime(i) foreach i within 2 ... num;
in
current when size(primeFactors) = 0
else
primeFactorizationHelp(num / product(primeFactors), current ++ primeFactors);