Sei sulla pagina 1di 3

Documento de la serie: “Aprenda a Programar Computadores como en PRIMARIA…”

Profesor: Braulio Barrios Última revisión: Abril/2012

EXPLICACION DEL ALGORITMO PARA DETERMINAR SI UN NUMERO ES PRIMO

Un número PRIMO es aquel que UNICAMENTE es DIVISIBLE por sí mismo y por la


unidad, es decir, solo tiene 2 DIVISIONES EXACTAS (Divisiones con RESIDUO = 0).

Verifiquemos el Número 5 :

* Al dividir 5/1 el residuo es 0


* Al dividir 5/2 el residuo es 1
* Al dividir 5/3 el residuo es 2
* Al dividir 5/4 el residuo es 1
* Al dividir 5/5 el residuo es 0

Cantidad de divisiones exactas desde 1 hasta el número mismo = 2, entonces, 5 ES PRIMO

Verifiquemos el Número 4 :

* Al dividir 4/1 el residuo es 0


* Al dividir 4/2 el residuo es 0
* Al dividir 4/3 el residuo es 1
* Al dividir 4/4 el residuo es 0

Cantidad de divisiones exactas desde 1 hasta el número mismo = 3, entonces, 4 NO ES PRIMO

Verifiquemos el Número 7 :

* Al dividir 7/1 el residuo es 0


* Al dividir 7/2 el residuo es 1
* Al dividir 7/3 el residuo es 1
* Al dividir 7/4 el residuo es 3
* Al dividir 7/5 el residuo es 2
* Al dividir 7/6 el residuo es 1
* Al dividir 7/7 el residuo es 0

Cantidad de divisiones exactas desde 1 hasta el número mismo = 2, entonces, 7 ES PRIMO

Como se observa, el procedimiento consiste en hacer DIVISIONES SUCESIVAS del


número investigado, desde 1 hasta el número mismo y vamos CONTANDO cuántas de
ellas producen RESIDUO (NO cociente) igual a CERO. Al final, si ese CONTADOR es igual
a 2 entonces el Número ES PRIMO, caso contrario NO es PRIMO.

Ejercicio:

Escriba un programa C++ que permita Leer un número e indicar en pantalla si es


PRIMO o NO.

Análisis de EPS:

ENTRADA : NUM ( número a verificar si es primo, introducido por el usuario)


PROCESO : Realizar divisiones sucesivas de NUM entre 1, 2, 3, …, NUM y contar cuántas de
ellas producen RESIDUO cero (utilice el operador MOD).

SALIDA : Mensaje indicando “Es Primo” ó “No es primo”, según que el contador sea o no 0.
Documento de la serie: “Aprenda a Programar Computadores como en PRIMARIA…”
Profesor: Braulio Barrios Última revisión: Abril/2012

Algorítmicamente, lo anterior se puede expresar así:

PRIMO V1.0

Escriba(“Digite el número: ”); Lea(N)


contacero  0

PARA X  1 hasta N Haga /*utilizo un para, porque se cuantas veces . ¿Podría utilizar aquí
un MQ en vez de este PARA ?, ¿Cómo quedaría entonces el
Algoritmo? */

res  N div X
SI res = 0 entonces
contacero  contacero + 1
FSI
FIN PARA

SI contacero = 2 Entonces
Escriba (“ El numero“, N, “ Es Primo” )
Sino
Escriba (“ El numero“, N, “ NO Es Primo” )

FSI
FIN PRIMO(V 1.0)

Al codificar este algoritmo en C++ se obtendría un programa como el siguiente:

/* Programa PRIMOS1.CPP */

#include<iostream.h>
#include<conio.h>

void main ()
{
Int contacero, x;

clrscr();
cout << " Numero a verificar ?? "; cin >> n;

contacero = 0; /* comienzo en 0 */

for ( i=1 ; i < n ; i++ )


{
res = n % i; /* va obteniendo sucesivamente los residuos de dividir n entre i */
if ( res = 0)
contacero += 1;
}

if ( contacero = 2 )
{
gotoxy(10,10); cout << “ El numero“<< N<< “ Es Primo”;
}
Else
{
gotoxy(10,10); cout << “ El numero“<< N<< “ Es Primo”;
}

gotoxy(10,20); cout << “ Pulse ENTER para terminar”; getch();


} /* FIN del programa */
Documento de la serie: “Aprenda a Programar Computadores como en PRIMARIA…”
Profesor: Braulio Barrios Última revisión: Abril/2012

Si quiero que el programa permita verificar VARIOS números, entonces encierro la anterior solución en un
GRAN ciclo repetitivo externo, por ejemplo:

// Programa PRIMOS2.cpp
#include<iostream.h>
#include<conio.h>

void main ()
{
int N, contacero, x;

DO {
clrscr(); cout << " Numero a verificar ?? "; CIN >> n; Contacero = 0;
FOR ( i=1 ; i < n ; i++ )
{
res = n % i ; /* va obteniendo sucesivamente los residuos de dividir n entre i */
if ( res = 0)
contacero += 1;
}

if ( contacero == 2 )
{
gotoxy(10,10); cout << “ El numero“<< N<< “ Es Primo”;
}
Else
{
gotoxy(10,10); cout << “ El numero“<< N<< “ Es Primo”;
}

gotoxy(10,20); cout << “ Quiere probar otro número? [S/N] “;


desea = toupper (getche()); /* lee el carácter y lo convierte a Mayúsculas*/

} while (desea == ‘S’ );

} /* FIN del programa */

También lo puedo controlar con un ciclo MQ (while), así:

// Programa PRIMOS2.cpp
#include<iostream.h>
#include<conio.h>

void main ()
{
int N, x;
char seguir;
seguir =’S’

WHILE (seguir == ‘S’)


{
clrscr(); cout << " Numero a verificar ?? "; cin >> n; contacero = 0;
for ( i=1 ; i < n ; i++ )
{
res = n % i ; /* va obteniendo sucesivamente los residuos de dividir n entre i */
if ( res = 0)
contacero += 1;
}

if ( contacero == 2 )
{
gotoxy(10,10); cout << “ El numero“<< N<< “ Es Primo”;
}
ELSE
{
gotoxy(10,10); cout << “ El numero“<< N<< “ Es Primo”;
}
gotoxy(10,20); cout << “ Quiere probar otro número? [S/N] “;
seguir = toupper (getche()); /* lee el carácter y lo convierte a Mayúsculas*/
}
} /* FIN del programa */

Potrebbero piacerti anche