Descomposición+en+factores+primos

=__**Descomposición en factores primos**__=

Escribir un programa que realice la descomposición en factores primos de un número introducido por teclado.

El programa debe ir escribiendo la tabla de los factores primos, a medida que los va calculando, tal como se muestra en el ejemplo siguiente:

code format="pascal" Descomposicion en factores primos Introduce un numero entero -> 84

N | Factores primos -- | ---  84 | 2   42 | 2   21 | 3    7 | 7    1 | code


 * NOTA:** Se deberá utilizar, al menos, un subprograma que nos diga si un número es primo o no.

=Solución:=

code format="pascal" PROGRAM subpr_16 ;

FUNCTION fnboEsPrimo (iNum : Integer ) : Boolean ; VAR iDivisor : Integer ; boPrimo : Boolean ; BEGIN boPrimo := TRUE ;

iDivisor := 2 ; WHILE boPrimo AND (iDivisor < iNum) DO      IF (iNum MOD iDivisor) = 0  THEN boPrimo := FALSE { tiene divisor -> NO PRIMO } ELSE iDivisor := iDivisor + 1 ;

fnboEsPrimo := boPrimo END ;

FUNCTION fniSiguientePrimo (iNum : Integer ) : Integer ; BEGIN REPEAT { Analizar el siguiente número } iNum := iNum + 1 ; UNTIL fnboEsPrimo (iNum) ;

fniSiguientePrimo := iNum ; END ;

{--- Variables del Programa Principal -} VAR iNumero, iFactorPrimo : Integer ;

BEGIN { Programa Principal ---}

Writeln ('Descomposicion en factores primos') ;

REPEAT Write ('Introduce un numero positivo: ') ; Readln (iNumero) UNTIL iNumero >= 1 ;

Writeln ; { Escribir la cabecera } Writeln ('N':10, '|':5, 'Factores primos':18) ; Writeln ('--':10, '|':5, '---':18) ;

iFactorPrimo := 1 ;

IF iNumero = 1 THEN Writeln (iNumero:10, '|':5, iFactorPrimo:12) ELSE REPEAT iFactorPrimo := fniSiguientePrimo (iFactorPrimo);

{ Mientras sea divisible por él: divisiones sucesivas } WHILE (iNumero MOD iFactorPrimo) = 0 DO           BEGIN { Escribir línea: Número | factor primo } Writeln (iNumero:10, '|':5, iFactorPrimo:12) ;

iNumero := iNumero DIV iFactorPrimo ; END ; UNTIL iNumero = 1 ;

Writeln (iNumero:10, '|':5); { Escribir última línea }

WriteLn ; ReadLn ; END. { FIN del PROGRAMA } code