在Haskell中给出一个int,计算接下来的3个素数

问题描述 投票:-3回答:1

我试图在Haskell中编写一个函数,允许我计算接下来的3个素数,给定一个Intenger N并将三个素数存储在一个排序列表中。

挑战是在不导入任何外部模块的情况下完成。

功能行为:

* nextPrimes 75 = [79,83,89]

* nextPrimes 64 = [67,71,73]

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

nextPrimes :: Int -> [Int] nextPrimes n

haskell time-complexity prime-factoring
1个回答
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]
© www.soinside.com 2019 - 2024. All rights reserved.