我是Scheme新手,我想按升序排列数字的素因子。我找到了这段代码,但它没有排序。
(define (primefact n)
(let loop ([n n] [m 2] [factors (list)])
(cond [(= n 1) factors]
[(= 0 (modulo n m)) (loop (/ n m) 2 (cons m factors))]
[else (loop n (add1 m) factors)])))
你能帮忙吗?
谢谢
答案 0 :(得分:1)
我会说它排序,但下降。如果你想以另一种方式排序,只需反转结果:
(cond [(= n 1) (reverse factors)]
答案 1 :(得分:0)
通常当你需要按照顺序排序的东西时,你可以 他们喜欢这样:
(define (primefact-asc n)
(let recur ((n n) (m 2))
(cond ((= n 1) '())
((= 0 (modulo n m)) (cons m (recur (/ n m) m))) ; replaced 2 with m
(else (recur n (+ 1 m))))))
请注意,这不是尾递归,因为它需要包含结果,但由于答案中的因子数量很少(可能是数千),因此无关紧要。
此外,因为它确实找到了这些因素,所以你不需要每轮开始2,而是你找到的数字。
答案 2 :(得分:0)
使用哪种方言方案?
三个提示:
你只需要测试与数字的平方根不相等的除数。 a * b = N; a< b ---> a< = sqrt(N)。
如果你需要所有Prime数字少一些数字,你应该使用eratothenes的筛子。见维基百科。
在开始编写程序之前,请查看Wikipedia。
如果