program euclides;
var j,i,n : integer; lista : array [1..30] of integer; bol : boolean;
function es_primo (n : integer) : boolean;
function primo (n, i : integer) : boolean;
begin
if i > trunc(sqrt(n)) then
primo := true
else if n mod i = 0 then
primo := false
else
primo := primo (n, i + 1);
end;
begin
if n < 2 then
es_primo := false {Por convenio}
else
es_primo := primo (n, 2);
end;
procedure factoriza (n : integer);
var primero : boolean;
procedure descomposicion (numero, expon, i_anterior : integer; var primero : boolean);
var resto, i : integer;
begin
if numero > 1 then
begin
i := 0;
repeat
i := i + 1;
resto := numero mod lista[i];
until resto = 0;
if i = i_anterior then
expon := expon + 1
else
begin
if expon <> 1 then
begin
write ('^', expon);
expon := 1;
end;
if primero then
begin
write (lista[i]);
primero := false;
end
else
write (' * ', lista [i]);
end;
numero := numero div lista[i];
descomposicion (numero, expon, i, primero);
end
else if numero = 1 then
begin
if primero then
write ('1')
else if expon <> 1 then
write ('^', expon);
end;
end;
begin
write (n, ' = ');
if n < 0 then
begin
write ('- ');
n := - n;
end;
if n = 0 then
writeln ('0')
else
begin
primero := true;
descomposicion (n, 1, 0, primero);
writeln;
end;
end;
begin
j := 0;
for i :=2 to 100 do
if es_primo (i) then
begin
j := j+1;
lista[j]:=i;
end;
for i := 1 to 100 do
factoriza(i);
end.