open System
open System.Collections.Generic
let recip =
let cache = Dictionary<_, _>()
fun n m ->
if cache.ContainsKey( (n, m) ) then cache.[ (n, m) ]
else
let res = List.find (fun a -> n * a % m = 1) [1..(m - 1)]
cache.[ (n, m) ] <- res
res
let rec binomialMod n k m =
let rec recBinomialMod n k m result =
if k = 1 then n * result % m
else
let k_1 = recip k m
recBinomialMod (n - 1) (k - 1) m (result * n * k_1 % m)
recBinomialMod n k m 1
let isPrime n =
List.exists (fun i -> n % i = 0) [2..(n - 1)]
let primes = List.filter isPrime [1000..5000]
let binomials = List.map (fun m -> binomialMod (int (1000000000000L % (int64 m))) 1000000000 m) primes
let solution =
let rec recSolution (binomials:(int list)) product chosen =
seq {
if chosen = 3 then yield product
else if binomials.IsEmpty then yield 0
yield! recSolution binomials.Tail product chosen
}
(Seq.sum (recSolution binomials 1 0))
Console.WriteLine solution
b3BlbiBTeXN0ZW0Kb3BlbiBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYyAKIApsZXQgcmVjaXAgPQogIGxldCBjYWNoZSA9IERpY3Rpb25hcnk8XywgXz4oKQogIGZ1biBuIG0gLT4KICAgICAgaWYgY2FjaGUuQ29udGFpbnNLZXkoIChuLCBtKSApIHRoZW4gY2FjaGUuWyAobiwgbSkgXQogICAgICBlbHNlIAogICAgICAgIGxldCByZXMgPSBMaXN0LmZpbmQgKGZ1biBhIC0+IG4gKiBhICUgbSA9IDEpIFsxLi4obSAtIDEpXQogICAgICAgIGNhY2hlLlsgKG4sIG0pIF0gPC0gcmVzCiAgICAgICAgcmVzCiAgICAgICAgCmxldCByZWMgYmlub21pYWxNb2QgbiBrIG0gID0KICBsZXQgcmVjIHJlY0Jpbm9taWFsTW9kIG4gayBtIHJlc3VsdCA9CiAgICBpZiBrID0gMSB0aGVuIG4gKiByZXN1bHQgJSBtIAogICAgZWxzZSAKICAgICAgbGV0IGtfMSA9IHJlY2lwIGsgbQogICAgICByZWNCaW5vbWlhbE1vZCAobiAtIDEpIChrIC0gMSkgbSAocmVzdWx0ICogbiAqIGtfMSAlIG0pICAgICAgCiAgcmVjQmlub21pYWxNb2QgbiBrIG0gMQogIApsZXQgaXNQcmltZSBuID0KICBMaXN0LmV4aXN0cyAoZnVuIGkgLT4gbiAlIGkgPSAwKSBbMi4uKG4gLSAxKV0KICAgIApsZXQgcHJpbWVzID0gTGlzdC5maWx0ZXIgaXNQcmltZSBbMTAwMC4uNTAwMF0KbGV0IGJpbm9taWFscyA9IExpc3QubWFwIChmdW4gbSAtPiBiaW5vbWlhbE1vZCAoaW50ICgxMDAwMDAwMDAwMDAwTCAlIChpbnQ2NCBtKSkpIDEwMDAwMDAwMDAgbSkgcHJpbWVzCgpsZXQgc29sdXRpb24gPQogIGxldCByZWMgcmVjU29sdXRpb24gKGJpbm9taWFsczooaW50IGxpc3QpKSBwcm9kdWN0IGNob3NlbiA9CiAgICBzZXEgeyAgICAgIAogICAgICBpZiBjaG9zZW4gPSAzIHRoZW4geWllbGQgcHJvZHVjdAogICAgICBlbHNlIGlmIGJpbm9taWFscy5Jc0VtcHR5IHRoZW4geWllbGQgMCAKICAgICAgICB5aWVsZCEgcmVjU29sdXRpb24gYmlub21pYWxzLlRhaWwgcHJvZHVjdCBjaG9zZW4KICAgIH0KICAoU2VxLnN1bSAocmVjU29sdXRpb24gYmlub21pYWxzIDEgMCkpCiAgCkNvbnNvbGUuV3JpdGVMaW5lIHNvbHV0aW9u
/home/ZEgcGr/prog.fs(32,9): error FS0010: Unexpected yield! in expression. Expected '}' or other token.
/home/ZEgcGr/prog.fs(29,9): error FS0604: Unmatched '{'