17 lines
498 B
OCaml
17 lines
498 B
OCaml
let modpow m =
|
|
let rec loop p b e =
|
|
if e land 1 = 0
|
|
then if e = 0 then p else loop p (b * b mod m) (e lsr 1)
|
|
else loop (p * b mod m) (b * b mod m) (e lsr 1)
|
|
in loop 1
|
|
|
|
let is_deceptive n =
|
|
let rec loop x =
|
|
x * x <= n && (n mod x = 0 || n mod (x + 4) = 0 || loop (x + 6))
|
|
in
|
|
n land 1 <> 0 && n mod 3 <> 0 && n mod 5 <> 0 &&
|
|
modpow n 10 (pred n) = 1 && loop 7
|
|
|
|
let () =
|
|
Seq.(ints 49 |> filter is_deceptive |> take 100
|
|
|> iter (Printf.printf " %u%!")) |> print_newline
|