La solution est le fichier ppcm.ml.
La décomposition du ppcm s'obtient en fusionnant les décompositions de u et de v. Dans le cas d'un facteur premier présent dans des deux décompostions, p present du fois dans u et dv fois dans v, on retient d facteurs p, où d est le plus grand des deux nombres du et dv. De fait, cette règle vaut encore si p n'est present que, par exemple, dans la decomposition de u, car on a alors dv = 0 < du.
Avec nos listes ordonnées de facteurs, on est très proche d'une bête fusion de listes triées.
let rec ppcmf xs ys = match xs,ys with | [],_ -> ys | _,[] -> xs | x::rx, y::ry -> if x < y then x::ppcmf rx ys else if y < x then y::ppcmf xs ry else (* x=y *) x::ppcmf rx ry ;; |
On retrouve la structure de la fonction communs de la section précédente.