blob: 6c7d977608f518075e87a3f7869923ec63f08dc4 (
plain) (
tree)
|
|
open System
type Generator =
struct
val mutable current: int64
val factor: int64
new (c, f) = {current=c; factor=f}
member this.generate(multiple: int64) =
this.current <- (this.current * this.factor) % 2147483647L
if multiple <> 0 && this.current % multiple <> 0 then this.generate(multiple)
member this.toBits() =
Convert.ToString(this.current, 2).PadLeft(32, '0') |> Seq.toArray |> (fun x -> x[16..])
end
let countValid iterations multipleA multipleB =
let mutable generatorA = new Generator(591, 16807)
let mutable generatorB = new Generator(393, 48271)
let mutable count = 0
for i = 1 to iterations do
generatorA.generate(multipleA)
generatorB.generate(multipleB)
let aLow16 = generatorA.toBits()
let bLow16 = generatorB.toBits()
if aLow16 = bLow16 then
count <- count + 1
printfn "%d" count
let () =
countValid 40000000 0 0
countValid 5000000 4 8
|