aboutsummaryrefslogtreecommitdiff
path: root/rosetta/factors-of-int.neb
blob: ea3ca151a0eb52d8e44de5a968cc2714614f953f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
(func .list-of-num (num)
    (def nums (list))
    (for-count num
        (redef nums (append nums _idx_)))
    nums)

(func .rough-sqrt (num) (.rough-sqrt num 1))

(func .rough-sqrt (num val)
    (branch
        ((eq? (* val val) num) val)
        ((> (* val val) num) (- val 1))
        (#true
            (.rough-sqrt num (+ 1 val)))))

(func factor-naive (num)
    (filter (lambda (x) (int? (/ num x))) (.list-of-num num)))

(func factor-better (num)
    (append
        (filter (lambda (x) (int? (/ num x))) (.list-of-num (floor (/ num 2))))
        num))

(func factor-even-better (num)
    (def ret (list))
    (for-each (.list-of-num (.rough-sqrt num))
        (if (int? (/ num _item_))
            (redef ret (append ret (list _item_ (/ num _item_))))))
    ret)