मैं निम्नलिखित कोड है कि एरेटोस्थेनेज की चलनी लागू करता है:हास्केल
primes :: [Int]
primes = primes' [2..]
primes' :: [Int] -> [Int]
primes' [] = []
primes' (p:ps) = p:(primes' [p' | p' <- ps, not (p' `isMultiple` p)])
a `isMultiple` b = (a `mod` b) == 0
main = print (sum (primes' [2..100000]))
मैं की तरह
main = print (sum [p | p <- primes, p < 100000]))
कुछ करने के लिए मुख्य परिवर्तन करना चाहते हैं नहीं आश्चर्यजनक रूप से, इस वजह से लटकी हुई है यह अनंत सूची प्राइम्स के हर तत्व के खिलाफ पी की तुलना करनी चाहिए। चूंकि मुझे पता है कि प्राइम्स बढ़ते क्रम में है, जैसे ही मुझे एक ऐसी तत्व मिलती है जो मेरी ऊपरी सीमा से अधिक हो, अनंत सूची को कैसे छोटा कर सकता हूं?
पेज। सिद्धांत रूप में, primes 'primes की एक सूची वापस करने के लिए इनपुट सूची फ़िल्टर। मुझे पता है कि अगर मैं 2 से कम किसी अन्य चीज़ पर सूची शुरू करता हूं तो कुछ समस्याएं होंगी। मैं अभी भी इस मुद्दे को अपने आप को हल करने के तरीके पर काम कर रहा हूं, इसलिए कृपया कोई spoilers नहीं। धन्यवाद ;-)
वैसे, यह Erastosthenes की असली चलनी नहीं है। [यह कूल आलेख] देखें (www.cs.hmc.edu/~oneill/papers/Sieve-JFP.pdf) बाहर। – hugomg
लेख के लिए धन्यवाद। मैंने अभी तक इसे पढ़ना समाप्त नहीं किया है, लेकिन अब तक यह दिलचस्प लग रहा है। –