0
A
回答
0
假設你正在尋找Euler's totient function,只需撥打
euler_fi1 n = length $ filter ((==1).(gcd n)) [1..n-1]
鏈接的WP文章給出了一個公式計算直接的:
euler_fi n = let
fs = Data.List.nub $ factorize n
pr = n * product [p-1 | p <- fs]
in Data.List.foldl' div pr fs
你需要一個factorize
功能爲:
factorize n | n > 1 = go n (2:[3,5..]) where
go n [email protected](d:t)
| d*d > n = [n]
| r == 0 = d : go q ds
| otherwise = go n t
where
(q,r) = quotRem n d
下一個優化是使用質數列表,而不是(2:[3,5..])
。
1
您的錯誤來自「gcd x 0 = x」。 「x :: Int」是推斷的結果,但「gcd :: Int-> Int-> Bool」的類型聲明需要Bool。我預計「gcd x 0 =(x == 1)」是你應該輸入的內容。
相關問題
- 1. 「近似」最大公約數
- 2. 最大公約數 - 上限
- 3. 最大公約數Objective-C
- 4. NASM最大公約數
- 5. 最大公約數環
- 6. 找到最大公約約
- 7. 確定最大樂趣的算法
- 8. 最大公約數 - 前後條件
- 9. 程序找到最大的公約數
- 10. 遞歸最大公約數解釋
- 11. C#找到最大公約數
- 12. Python中最大公約數的代碼
- 13. C++程序計算最大公約數
- 14. 計算在python最大公約數
- 15. Pascal - 最大公約數 - 無輸出
- 16. R - 最大公約數dplyr例程
- 17. 使用歐幾里德算法的最大公約數?
- 18. 使用堆棧來尋找最大的公約數
- 19. PHP樂趣codeing
- 20. 小strtok()樂趣
- 21. python:浮點數的最大公約數(gcd),最好是numpy
- 22. Sed和Awk樂趣的最佳教程
- 23. 調用基類的樂趣()中使用
- 24. GAE的樂趣:使用key_name作爲PK?
- 25. Moq和異步使用LazyCache的樂趣
- 26. 固定的樂趣
- 27. 謎語的樂趣
- 28. AccessViolation調試樂趣
- 29. 與OpenLDAP的樂趣
- 30. 樂趣CSS花車
Haskell序言已經爲您定義了一個'gcd'函數,不需要自己定義它。 – 2012-03-05 13:51:45
*「所有常見除數的長度== 1」* ---我不明白。這是什麼意思? – dave4420 2012-03-05 14:10:37
你試圖解決什麼問題? (如果是Project Euler問題73,順便說一下,最佳解決方案不會計算任何'gcd'。) – 2012-03-05 14:12:38