ocaml: phase 5.1 triangle_div.ml baseline (first triangle with >10 divisors = 120)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 37s

PE12 with target = 10:

  let count_divisors n =
    let c = ref 0 in
    let i = ref 1 in
    while !i * !i <= n do
      if n mod !i = 0 then begin
        c := !c + 1;
        if !i * !i <> n then c := !c + 1
      end;
      i := !i + 1
    done;
    !c

  let first_triangle_with_divs target =
    walk triangles T(n) = T(n-1) + n until count_divisors T > target

T(15) = 120 has 16 divisors — first to exceed 10. Real PE12 uses
target 500 (answer 76576500); 10 stays well under budget.

126 baseline programs total.
This commit is contained in:
2026-05-10 01:17:11 +00:00
parent 58ea001f12
commit 0b79d4d4b4
3 changed files with 32 additions and 0 deletions

View File

@@ -122,6 +122,7 @@
"sum_squares.ml": 385,
"tree_depth.ml": 4,
"triangle.ml": 11,
"triangle_div.ml": 120,
"twosum.ml": 5,
"unique_set.ml": 9,
"validate.ml": 417,

View File

@@ -0,0 +1,26 @@
let count_divisors n =
let c = ref 0 in
let i = ref 1 in
while !i * !i <= n do
if n mod !i = 0 then begin
c := !c + 1;
if !i * !i <> n then c := !c + 1
end;
i := !i + 1
done;
!c
let first_triangle_with_divs target =
let t = ref 0 in
let n = ref 0 in
let found = ref false in
while not !found do
n := !n + 1;
t := !t + !n;
if count_divisors !t > target then found := true
done;
!t
;;
first_triangle_with_divs 10

View File

@@ -407,6 +407,11 @@ _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-10 Phase 5.1 — triangle_div.ml baseline (first triangle
number with > 10 divisors = 120). PE12 with target 10. T(15) = 120
has 16 divisors {1,2,3,4,5,6,8,10,12,15,20,24,30,40,60,120} —
first to break 10. Real PE12 uses target 500 (answer 76576500);
10 stays well under our budget. 126 baseline programs total.
- 2026-05-10 Phase 5.1 — perfect.ml baseline (count perfect numbers
≤ 500 = 3). Perfect numbers = those where d(n) = n. Three under
500: 6, 28, 496. (8128 is the next.) Same div_sum machinery as