33 lines
991 B
Fennel
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 " ")))
|
|
)
|
|
)
|
|
)
|