diff --git a/lib/ocaml/baseline/euler10.ml b/lib/ocaml/baseline/euler10.ml new file mode 100644 index 00000000..72b16caa --- /dev/null +++ b/lib/ocaml/baseline/euler10.ml @@ -0,0 +1,22 @@ +let sieve_sum n = + let s = Array.make (n + 1) true in + s.(0) <- false; + s.(1) <- false; + for i = 2 to n do + if s.(i) then begin + let j = ref (i * i) in + while !j <= n do + s.(!j) <- false; + j := !j + i + done + end + done; + let total = ref 0 in + for i = 2 to n do + if s.(i) then total := !total + i + done; + !total + +;; + +sieve_sum 100 diff --git a/lib/ocaml/baseline/expected.json b/lib/ocaml/baseline/expected.json index 99f9f0a7..0bb688fd 100644 --- a/lib/ocaml/baseline/expected.json +++ b/lib/ocaml/baseline/expected.json @@ -26,6 +26,7 @@ "exception_handle.ml": 4, "exception_user.ml": 26, "euler1.ml": 233168, + "euler10.ml": 1060, "euler2.ml": 4613732, "euler5.ml": 232792560, "euler6.ml": 25164150, diff --git a/plans/ocaml-on-sx.md b/plans/ocaml-on-sx.md index d523a6a1..2dddfaff 100644 --- a/plans/ocaml-on-sx.md +++ b/plans/ocaml-on-sx.md @@ -407,6 +407,10 @@ _Newest first._ binary search tree (`type 'a tree = Leaf | Node of 'a * 'a tree * 'a tree`) with insert + in-order traversal. Tests parametric ADT, recursive match, List.append, List.fold_left. +- 2026-05-09 Phase 5.1 — euler10.ml baseline (sum of primes ≤ 100 = + 1060, scaled-down Project Euler #10). Sieve of Eratosthenes + followed by a sum loop. Used 100 instead of 2 million to fit our + contended host's runtime budget. 110 baseline programs total. - 2026-05-09 Phase 5.1 — euler5.ml baseline (Project Euler #5, smallest number divisible by all 1..20 = 232792560). Iteratively takes lcm of running result with i for i=2..n; lcm via gcd via