按升序排序素数因子

时间:2013-12-14 19:02:01

标签: scheme prime-factoring

我是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)])))
你能帮忙吗? 谢谢

3 个答案:

答案 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。

如果