let rec decomp_rec q u = if u = 1 then [] else if u mod q = 0 then q::decomp_rec q (u/q) else decomp_rec (q+1) u ;; let decompose u = decomp_rec 2 u ;; |
(* q est qi, qq est qi+1 *) let rec decomp_rec q qq u = if u = 1 then [] else let v = u/q in (* éviter de diviser deux fois, diviser c'est cher *) if v < q then [u] (* liste du seul élément u, même chose que u::[] *) else if u mod q = 0 then q::decomp_rec q qq v else decomp_rec qq (qq+2) u ;; let decompose u = decomp_rec 2 3 u ;; |