let rec do_rec q qq qqq x u = if u = 1 then [] else let v = u/q in if v < q then [u] else if u mod q = 0 then q::do_rec q qq qqq x v else do_rec qq qqq (qqq+x) (match x with 2 -> 4 | _ -> 2) u let decompose u = do_rec 2 3 5 2 u