diff options
Diffstat (limited to 'rosetta/factors-of-int.neb')
| -rw-r--r-- | rosetta/factors-of-int.neb | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/rosetta/factors-of-int.neb b/rosetta/factors-of-int.neb new file mode 100644 index 0000000..ea3ca15 --- /dev/null +++ b/rosetta/factors-of-int.neb @@ -0,0 +1,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) |
