ocaml: phase 5.1 euler3.ml baseline (largest prime factor of 13195 = 29)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 27s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 27s
PE3's worked example. Trial-division streaming: when the current
factor divides m, divide and update largest; otherwise bump factor:
let largest_prime_factor n =
let m = ref n in
let factor = ref 2 in
let largest = ref 0 in
while !m > 1 do
if !m mod !factor = 0 then begin
largest := !factor;
m := !m / !factor
end else factor := !factor + 1
done;
!largest
largest_prime_factor 13195 = 29 (= 5 * 7 * 13 * 29)
The full PE3 number 600851475143 exceeds JS safe-int (2^53 ≈ 9e15
in float terms; 6e11 is fine but the intermediate 'i mod !factor'
on the way to 6857 can overflow precision). 13195 keeps the program
portable across hosts.
113 baseline programs total.
This commit is contained in:
15
lib/ocaml/baseline/euler3.ml
Normal file
15
lib/ocaml/baseline/euler3.ml
Normal file
@@ -0,0 +1,15 @@
|
||||
let largest_prime_factor n =
|
||||
let m = ref n in
|
||||
let factor = ref 2 in
|
||||
let largest = ref 0 in
|
||||
while !m > 1 do
|
||||
if !m mod !factor = 0 then begin
|
||||
largest := !factor;
|
||||
m := !m / !factor
|
||||
end else factor := !factor + 1
|
||||
done;
|
||||
!largest
|
||||
|
||||
;;
|
||||
|
||||
largest_prime_factor 13195
|
||||
@@ -28,6 +28,7 @@
|
||||
"euler1.ml": 233168,
|
||||
"euler10.ml": 1060,
|
||||
"euler2.ml": 4613732,
|
||||
"euler3.ml": 29,
|
||||
"euler4_small.ml": 9009,
|
||||
"euler5.ml": 232792560,
|
||||
"euler6.ml": 25164150,
|
||||
|
||||
@@ -407,6 +407,12 @@ _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 — euler3.ml baseline (largest prime factor of
|
||||
13195 = 29; PE3's worked example). Trial-division streaming: when
|
||||
the current factor divides m, divide and update largest; otherwise
|
||||
bump factor. Numbers like 600851475143 (the actual PE3) exceed JS
|
||||
safe-int (2^53 ≈ 9e15), so 13195 keeps the program portable. 113
|
||||
baseline programs total.
|
||||
- 2026-05-09 Phase 5.1 — euler7.ml baseline (100th prime = 541;
|
||||
scaled-down PE7 which asks for the 10001st = 104743). Trial-
|
||||
division within an outer while loop searching forward from 2,
|
||||
|
||||
Reference in New Issue
Block a user