生成一组无限的数字

时间:2014-11-16 10:47:34

标签: f# primes lazy-sequences

我正在尝试制作一个素数生成器,它应该能够返回一个素数序列,直到 nth 数。现在我认为除了我目前的解决方案之外,应该有更优雅的方式来处理这些序列,感觉有点冗长而且我不得不使用mutables。

0
|> Seq.unfold (fun x -> if isPrime x 
                          then Some(x, x + 1) 
                         else 
                          let mutable y = x
                          while isPrime y <> true do
                           y <- y + 1
                          Some(y, y + 1)) 
|> Seq.take(n)

2 个答案:

答案 0 :(得分:5)

使用过滤器的简单解决方案

let t = Seq.initInfinite id |> Seq.filter isPrime |> Seq.take n

答案 1 :(得分:0)

仅为了完整性,请参阅此MSDN treatment of sequences。它包括thisPrime定义

let isPrime n =
    let rec check i =
        i > n/2 || (n % i <> 0 && check (i + 1))
    check 2

let t2 n = seq { for n in 1..100 do if isPrime n then yield n } 
t2 10