Scanf.scanf "%d" (fun n -> let module S = Set.Make (struct type t = string let compare = compare end) in let rec loop i set = if i * i > n then S.cardinal set else if n mod i <> 0 then loop (i + 1) set else let set = S.add (Printf.sprintf "%d%d" i (n / i)) set in let set = S.add (Printf.sprintf "%d%d" (n / i) i) set in loop (i + 1) set in loop 1 S.empty |> Printf.printf "%d\n" )