blob: 54115bdbb3ad1c4d0cc4fe502bdca8a7be038652 (
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
30
31
32
33
34
35
36
37
38
39
40
41
|
(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)
(func factors (num)
(filter
(lambda (x)
(int? (/ num x)))
(.list-of-num (.rough-sqrt num))))
(func factor-pairs (num)
(map
(lambda (x)
(list x (/ num x)))
(factors num)))
|