RosettaCodeData/Task/Almost-prime/Fennel/almost-prime.fennel
2026-04-30 12:34:36 -04:00

33 lines
991 B
Fennel

(do ;;; show some k-almost-primes - translation of C via Algol W
(fn k-almost-prime? [nv k]
(var (p f n) (values 3 0 nv))
(while (and (<= f k) (= (% n 2) 0))
(set (n f) (values (math.floor (/ n 2)) (+ f 1)))
)
(while (and (<= f k) (<= (* p p) n))
(while (= (% n p) 0)
(set (n f) (values (math.floor (/ n p)) (+ f 1)))
)
(set p (+ p 2))
)
(when (> n 1)
(set f (+ f 1))
)
(= f k)
)
(do ;;; task
(for [k 1 5]
(var (c i kNumbers) (values 0 2 {}))
(while (< c 10)
(when (k-almost-prime? i k)
(table.insert kNumbers (string.format "%3d" i))
(set c (+ c 1))
)
(set i (+ i 1))
)
(print (.. "k = " k ": " (table.concat kNumbers " ")))
)
)
)