18 lines
373 B
OCaml
18 lines
373 B
OCaml
let rec isqrt n =
|
|
if n = 1 then 1
|
|
else let _n = isqrt (n - 1) in
|
|
(_n + (n / _n)) / 2
|
|
|
|
let sum_divs n =
|
|
let sum = ref 1 in
|
|
for d = 2 to isqrt n do
|
|
if (n mod d) = 0 then sum := !sum + (n / d + d);
|
|
done;
|
|
!sum
|
|
|
|
let () =
|
|
for n = 2 to 20000 do
|
|
let m = sum_divs n in
|
|
if (m > n) then
|
|
if (sum_divs m) = n then Printf.printf "%d %d\n" n m;
|
|
done
|