Numero+primo

=__**Ver si un número es primo o no**__=

> Escribir un programa que lea un número entero y positivo y diga si ese número es primo o no

Nota: Para simplificar las soluciones consideraremos que el número 1 es primo

**Utilizando sentencias FOR** code format="pascal" PROGRAM VerSiPrimo ; {Leer un nº y decir si es primo o no } VAR iNumero, iDivisor : Integer ; boEsPrimo         : Boolean ; BEGIN Writeln ('Ver si un número es primo o no') ; Write  ('Número positivo: ') ; Readln (iNumero)

boEsPrimo := TRUE ;        { Considerar que es primo }

{ ¿hay algún divisor mayor que 1 y menor que iNumero ? }  FOR iDivisor := 2 TO iNumero - 1 DO       IF (iNumero MOD iDivisor) = 0  THEN boEsPrimo := FALSE { tiene divisor => NO ES PRIMO }

IF boEsPrimo THEN WriteLn ('El número SI es primo') ELSE WriteLn ('El número NO es primo') END. code Considerando que el numero 1 no es primo El tratamiento del núumero 1 será un caso particular

**Utilizando sentencias FOR** code format="pascal" PROGRAM VerSiPrimo ; {Leer un nº y decir si es primo o no } VAR iNumero, iDivisor : Integer ; boEsPrimo         : Boolean ; BEGIN Writeln ('Ver si un número es primo o no') ; Write  ('Número positivo: ') ; Readln (iNumero)

IF iNumero = 1 THEN boEsPrimo := FALSE         { Por definición  } ELSE BEGIN boEsPrimo := TRUE ;        { Considerar que es primo }

{ ¿hay algún divisor mayor que 1 y menor que iNumero ? }      FOR iDivisor := 2 TO iNumero - 1 DO           IF (iNumero MOD iDivisor) = 0  THEN boEsPrimo := FALSE { tiene divisor => NO ES PRIMO } END ;

IF boEsPrimo THEN WriteLn ('El número SI es primo') ELSE WriteLn ('El número NO es primo') END. code

**Utilizando sentencia WHILE** code format="pascal" PROGRAM VerSiPrimo ; {Leer un nº y decir si es primo o no } VAR iNumero, iDivisor : Integer ; boEsPrimo         : Boolean ; BEGIN Writeln ('Ver si un número es primo o no') ; Write  ('Número positivo: ') ; Readln (iNumero)

boEsPrimo := TRUE ;        { Considerar que es primo }

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

IF boEsPrimo THEN WriteLn ('El número SI es primo') ELSE WriteLn ('El número NO es primo') END. code

**Utilizando sentencia WHILE (Disminuyendo número de iteraciones)** code format="pascal" PROGRAM VerSiPrimo ; {Leer un nº y decir si es primo o no } VAR iNumero, iDivisor : Integer ; boEsPrimo         : Boolean ; BEGIN Writeln ('Ver si un número es primo o no') ; Write  ('Número positivo: ') ; Readln (iNumero)

boEsPrimo := TRUE ;        { Considerar que es primo }

iDivisor := 2 ; WHILE boEsPrimo AND ( iDivisor <= Sqrt(iNumero) ) DO       IF (iNumero MOD iDivisor) = 0  THEN boEsPrimo := FALSE    { tiene divisor => NO ES PRIMO } ELSE iDivisor := iDivisor + 1 ;

IF boEsPrimo THEN WriteLn ('El número SI es primo') ELSE WriteLn ('El número NO es primo') END. code