Pour obtenir un programme donnant la décomposition d'un entier donné, nous allons utiliser la procédure Erato mise au point précédemment qui renvoie la liste des entiers premiers inférieurs à un nombre donné.
decompo:=proc(n)
local L,l,D,N;
begin
D:=[]: L:=Erato(n): l:=op(L): N:=n:
# l est l'ensemble des nombres premiers inférieurs à n #
while not(contains(l,N)) do
# tant que N n'est pas premier #
for k from 1 to nops(L) do
# nops(L)= nb d'éléments de L #
if N mod L[k]=0 then D:=D.[L[k]]; # si le kième premier divise N, on le rajoute à la liste#
N:=N div L[k]; # on divise N par ce nb premier #
break; # on recommence à la 5ème ligne des fois que le kième premier divise encore n#
end_if; end_for; end_while;
D:=D.[N]; # on n'oublie pas n si n est premier
end_proc:
decompo(50);
[2, 5, 5]
Pour être honnête, il existe la fonction factor qui donne directement la décomposition en produit de facteurs premiers.
factor(50);
2 5