func prime_factors(n) { return [] if (n < 1) gather { while (!(n & 1)) { n >>= 1 take(2) } var p = 3 while ((n > 1) && (p*p <= n)) { while (n %% p) { n //= p take(p) } p += 2 } take(n) if (n > 1) } }