Prime number calculation fun

前端 未结 18 1778
深忆病人
深忆病人 2020-12-05 15:32

We\'re having a bit of fun here at work. It all started with one of the guys setting up a Hackintosh and we were wondering whether it was faster than a Windows Box of (nearl

18条回答
  •  借酒劲吻你
    2020-12-05 15:48

    I decided to try this in F#, my first decent attempt at it. Using the Sieve of Eratosthenes on my 2.2Ghz Core 2 Duo it runs through 2..150,000 in about 200 milliseconds. Each time it calls it self it's eliminated the current multiples from the list, so it just gets faster as it goes along. This is one of my first tries in F# so any constructive comments would be appreciated.

    let max = 150000
    let numbers = [2..max]
    let rec getPrimes sieve max =
        match sieve with
        | [] -> sieve
        | _ when sqrt(float(max)) < float sieve.[0] -> sieve
        | _ -> let prime = sieve.[0]
               let filtered = List.filter(fun x -> x % prime <> 0) sieve // Removes the prime as well so the recursion works correctly.
               let result = getPrimes filtered max
               prime::result        // The filter removes the prime so add it back to the primes result.
    
    let timer = System.Diagnostics.Stopwatch()
    timer.Start()
    let r = getPrimes numbers max
    timer.Stop()
    printfn "Primes: %A" r
    printfn "Elapsed: %d.%d" timer.Elapsed.Seconds timer.Elapsed.Milliseconds
    

提交回复
热议问题