我试图在Haskell中编写一个函数,允许我计算接下来的3个素数,给定一个Intenger N并将三个素数存储在一个排序列表中。
挑战是在不导入任何外部模块的情况下完成。
功能行为:
* nextPrimes 75 = [79,83,89]
* nextPrimes 64 = [67,71,73]
它应该在不到2分钟的时间内计算出N个10位数的下3个素数。
nextPrimes :: Int -> [Int]
nextPrimes n
抱歉......但是我无法抗拒......
nextPrimes :: Int -> [Int]
nextPrimes n = let sq = fromIntegral . ceiling . sqrt $ fromIntegral n
pri k = (k,and [ k`mod`x/=0 | x <- [2..sq]])
in take 3 . map fst . filter snd $ map pri [n..]
这几乎是即时的,即使我们必须一直计算到sqrt n:
λ> nextPrimes 295084709089
[295084709159,295084709209,295084709273]