从2 Haskell开始查找素数

时间:2016-11-27 02:31:09

标签: haskell

编写一个名为isPrime的函数,用于确定整数是否为素数(均匀 只能由它自己和一个整除。作为参考,这里是小于100的素数列表: [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97 ] 什么是第1000到第1020个素数? (从2开始)

isPrime :: [Integer] 
isPrime = sieve [2..1020]
  where
    sieve (p:xs)
    | p*p <= 1020 = p : sieve [x|x <- xs, x `mod` p > 0] 
    | otherwise = (p:xs)

我尝试了这段代码,但它会打印素数2到1020。 我希望从2开始显示1000到1020

1 个答案:

答案 0 :(得分:1)

不是生成高达1020的素数,而是发出第1000到第1020个素数,你可以生成前1020个素数并仅发出最后的21个素数。

使用a naive unbounded sieve,我们可以编写以下内容

(dataBlob, sectionIDs, rowIDs)

然后找minus :: Ord a => [a] -> [a] -> [a] minus (x:xs) (y:ys) = case (compare x y) of LT -> x : minus xs (y:ys) EQ -> minus xs ys GT -> minus (x:xs) ys minus xs _ = xs primes :: [Integer] primes = eratos [2..] where eratos [] = [] eratos (p:xs) = p : eratos (xs `minus` [p, p+p..]) primesFromTo from to = drop (from-1) $ take to primes

primesFromTo 1000 1020

顺便说一下,命名(*Main> primesFromTo 1000 1020 [7919,7927,7933,7937,7949,7951,7963,7993,8009,8011,8017,8039,8053,8059,8069,8081,8087,8089,8093,8101,8111] )对于素数列表有点疑问......