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.