27 lines
708 B
Text
27 lines
708 B
Text
let rec gcd a = function
|
|
| 0 -> a
|
|
| b -> gcd b (a mod b)
|
|
|
|
let seq_index_of el =
|
|
let rec next i sq =
|
|
match sq () with
|
|
| Seq.Nil -> 0
|
|
| Cons (e, sq') -> if e = el then i else next (succ i) sq'
|
|
in
|
|
next 1
|
|
|
|
let seq_map_pairwise f sq =
|
|
match sq () with
|
|
| Seq.Nil -> Seq.empty
|
|
| Cons (_, sq') -> Seq.map2 f sq sq'
|
|
|
|
let () =
|
|
seq_stern_brocot |> Seq.take 15 |> Seq.iter (Printf.printf " %u") |> print_newline
|
|
and () =
|
|
List.iter
|
|
(fun n -> seq_stern_brocot |> seq_index_of n |> Printf.printf " %u@%u" n)
|
|
[1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 100]
|
|
|> print_newline
|
|
and () =
|
|
seq_stern_brocot |> Seq.take 1000 |> seq_map_pairwise gcd |> Seq.for_all ((=) 1)
|
|
|> Printf.printf " %B\n"
|