F# 只查找质数

F# finding only prime numbers

我最近刚接触 F#,所以请多多包涵。我遇到的问题是我试图只找到质数。

我写了这段代码:

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

let listNums = List.filter isPrime >> List.length;;

 let nums = [ 16; 17; 3; 4; 2; 5; 11; 6; 7; 18; 13; 14; ];;

let countPrimes (x:int) = x |> List.ofSeq |> listNums;;

正在尝试呼叫

countPrimes nums;;

但是失败并显示消息:

The type 'int' is not compatible with the type 'seq<'a>'

任何帮助将不胜感激

x |> List.ofSeq

对我来说似乎是个问题。您正在将 int 传递给需要列表的函数。 List.toSeq 将列表更改为序列。您希望函数 countPrimes 接受一个整数列表,而不仅仅是一个整数。尽管 Carsten 是对的,但 listNums 已经采用整数列表(编辑:并计算您想要的值,前提是 isPrime 是正确的)。

你不需要单独计算素数。足以删除并且可以工作:

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

let nums = [ 16; 17; 3; 4; 2; 5; 11; 6; 7; 18; 13; 14; ]

let listPrime lst =
    lst |> List.filter isPrime

nums |> listPrime |> printfn "%A"

输出: [17; 3; 2; 5; 11; 7; 13]

Link: https://dotnetfiddle.net/nVXwZ5

我找到了解决方案

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

let listNums = List.filter isPrime >> List.length;;

let nums = [| 16; 17; 3; 4; 2; 5; 11; 6; 7; 18; 13; 14; |];;

let countPrimes (x:int[]) = x |> List.ofSeq |> listNums;;

countPrimes nums;;

谢谢大家!