给定Haskell中的一个整数,计算下3个素数

时间:2019-03-13 21:21:08

标签: haskell time-complexity prime-factoring

我正在尝试在Haskell中编写一个函数,该函数可让我计算下3个素数(给定一个Intenger N)并将这三个素数存储在排序列表中。

面临的挑战是在不导入任何外部模块的情况下做到这一点。

函数的行为:

* nextPrimes 75 = [79,83,89]

* nextPrimes 64 = [67,71,73]

它应该在不到2分钟的时间内计算出N的下3个质数和10位数字。

nextPrimes :: Int -> [Int] nextPrimes n

1 个答案:

答案 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]