我有以下F#代码,该代码应找到给定数x的最小素数:
let smallestFactor x : int64 =
[2L .. x] |> Seq.find( fun s -> x % s = 0L )
但是,当我调用大量函数时,例如600851475143我的Visual Studio占用一些GB的内存和所有CPU能力,并且永不返回。 我通过JetBrains ReSharper作为使用C#编写的单元测试来启动代码:
[Test]
public void SmallestFactorOf600851475143()
{
var result = Problem3.smallestFactor( 600851475143 );
}
我的F#代码和数字是problem 3, Euler Project
解决方案的一部分我只是从F#开始。我的代码有明显的问题吗?
答案 0 :(得分:2)
好了,正如已经提到的,表达式[2L .. x]
创建了列表,并且为x = 600851475143分配了600851475143 * 8〜4,806 GB,因此这是行不通的。您真正想要的是遍历所有数字,因此顺序将完全适合您:
let smallestFactor x : int64 =
seq {2L .. x} |> Seq.find( fun s -> x % s = 0L )