2013-12-14 46 views
0

我是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)]))) 

你可以請幫忙。 謝謝

回答

1

我會說這是排序,但降序。如果你想在其他的方式排序,只是扭轉結果:

(cond [(= n 1) (reverse factors)] 
+0

這是真的@uselpa,我需要定義我自己的過程來扭轉它。 Thankx – InAbuukar

+0

'reverse'是Scheme標準中的一個程序,所以你不應該寫一個,除非它是你練習的目標。 – uselpa

+0

謝謝uselpa。 – InAbuukar

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,而是找到您找到的號碼。

0

使用Scheme的哪種方言?

三提示:

你只需要測試除數爲你數的平方根大致相等。 a * b = N; a < b - > a < = sqrt(N)。

如果你需要所有素數減少一些數字,你應該使用eratothenes篩。請參閱維基百科。

在開始編寫程序之前,請查看維基百科。

如果

+0

如果您需要篩選代碼。我寫了一些矢量和一個使用列表。傳一個電子郵件給我。 –