#load "nums.cma";; open Big_int;; let rec generate_combinations a1 a2 b1 b2 = let rec generate_single_number a b lim = if gt_big_int b lim then [] else [power_big_int_positive_big_int a b] @ generate_single_number a (succ_big_int b) lim in if gt_big_int a1 a2 then [] else (generate_single_number a1 b1 b2) @ (generate_combinations (succ_big_int a1) a2 b1 b2);; let rec uniq lst = match lst with [] -> [] | hd :: tl when List.exists (fun x -> eq_big_int x hd) tl -> uniq tl | hd :: tl -> [hd] @ uniq tl;; let a1 = big_int_of_int 2;; let a2 = big_int_of_int 100;; let b1 = big_int_of_int 2;; let b2 = big_int_of_int 100;; Printf.printf "%d\n" (List.length (uniq (generate_combinations a1 a2 b1 b2)));;Quick to come up but not so fast uniq function.
jeudi 29 avril 2010
Project Euler #29
Inscription à :
Publier les commentaires (Atom)
Aucun commentaire:
Enregistrer un commentaire