我正在尝试在Haskell中编写一个函数,该函数可让我计算下3个素数(给定一个Intenger N)并将这三个素数存储在排序列表中。
面临的挑战是在不导入任何外部模块的情况下做到这一点。
函数的行为:
* nextPrimes 75 = [79,83,89]
* nextPrimes 64 = [67,71,73]
它应该在不到2分钟的时间内计算出N的下3个质数和10位数字。
nextPrimes :: Int -> [Int]
nextPrimes n
答案 0 :(得分:0)
对不起...但是我无法抗拒...
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]