【问题标题】:F# Trying to generate a list of prime numbersF#尝试生成素数列表
【发布时间】:2021-03-03 13:54:04
【问题描述】:
let isPrime n =
    let rec check i =
        i > n/2 || (n % i <> 0 && check (i + 1))
    check 2

let rec Primes t =

   [ for n in 1..t do if isPrime n then yield n]


//[<EntryPoint>]
let main argv =
    printfn "Testing Exercise 16: Primes"

    test (lazy (Primes 1)) [] NoException
    test (lazy (Primes 2)) [2] NoException
    test (lazy (Primes 4)) [2;3] NoException
    test (lazy (Primes 11)) [2;3;5;7;11] NoException
                
    printfn ""
    0 // return an integer exit code

我是 F# 的新手,但为什么它从 1-t 生成列表而不是素数列表

【问题讨论】:

    标签: f# primes


    【解决方案1】:

    如果您自己运行 Primes 函数:

    > Primes 11;;
    val it : int list = [1; 2; 3; 5; 7; 11]
    

    当你不应该得到 1 作为素数时,for 应该来自 2 而不是来自 1。

    还有:

    • 没有必要将Primes 声明为rec,它不是递归调用自身
    • i &gt; n/2,您只需要检查i 直到n 的平方根

    【讨论】:

    • 谢谢!这解决了它!
    猜你喜欢
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 2022-09-27
    • 2016-06-29
    • 2016-05-05
    • 1970-01-01
    相关资源
    最近更新 更多