#load "nums.cma";; open Big_int;; let rec fib a b = function | 0 -> a | 1 -> b | n when n > 1 -> fib b (add_big_int a b) (n - 1) | _ -> raise (Invalid_argument "");; let rec fib_range n = let fn = fib zero_big_int unit_big_int n in if lt_big_int fn (big_int_of_string "4000000") then if eq_big_int (mod_big_int fn (big_int_of_int 2)) zero_big_int then fn :: (fib_range (n + 1)) else zero_big_int :: fib_range (n + 1) else [];; Printf.printf "%s\n" (string_of_big_int (List.fold_left (add_big_int) zero_big_int (fib_range 0)));;
Генерация списка по причинам детского восторга от fold, в принципе можно было сразу суммировать.
Aucun commentaire:
Enregistrer un commentaire