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 les deux décompostions, p présent 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 effectue donc une 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.