Bienvenido

Bienvenido
Disfruta el contenido

viernes, 1 de mayo de 2015

Generador de Números Primos Programación en C


Programa generador de números primos



Hola que tal a todos espero se la pasen bien Les dejo en esta entrada un pequeño programa que realice sobre numero primos probado con Visual Studio 2012


APOYO A ENCUESTA 
Hola a todos les escribo para apoyarme con una pequeña encuesta a traves deEncuesta Facil solo te tomara un minuto. 



Les dejo la direccion en este URL 
http://www.encuestafacil.com/RespWeb/Qn.aspx?EID=2051724



Espero que la informacion de este foro les sea de utilidad y gracias por sus visitas 

Existen muchas formas de generar numeros primos una de las mas populares es el Criba de Eratostenes. Existen otras opciones tal como algunas series matematicas que requieren factoriales y algo de recursion pero esta es bastante accesible y rapido de realizar

Partimos de una lista de números que van de 2 hasta un determinado número.
Eliminamos de la lista los múltiplos de 2.

Luego tomamos el primer número después del 2 que no fue eliminado (el 3) y eliminamos de la lista sus múltiplos, y así sucesivamente.

El proceso termina cuando el cuadrado del mayor número confirmado como primo es menor que el número final de la lista.

Los números que permanecen en la lista son los primos.

                                LISTA DE NUMERO PRIMOS POR EL CRIBA DE ERATOSTENES



Análisis del programa

Este programa consiste en dos ciclos. El ciclo externo lleva un recorrido del rango de valores a revisar mientras el segundo checa las condiciones de numero primo

  1.-Divisible entre 1
  2.-Divisible entre si mismo

La primera condición no se verifica ya que todo numero >= 1 es divisible entre uno y tomando en cuenta que el 1 no es primo y se cuenta desde el dos todos los valores subsecuentes cuentan con esta condición.

El ciclo interno verifica la segunda condición se verifica con un contador que cuenta la cantidad de divisores que cada valor contiene. Este valor no debe exceder de 2 para hacer la condición valida.

Notas de programación

Este código puede pasarse fácilmente a una función como parte mayor de un programa mayor o usar los valores registrados en el arreglo para pasarlos como argumento a otra parte del código y usar el código como un generador de números primos.


Espero les sea de utilidad y déjenme sus comentarios sobre que les gustaría que publicara próximamente y en otros lenguajes de programación. Pronto espero publicar ejemplos en C++ y C#


Suerte con sus proyectos y mucha suerte





Capturas en Pantalla del código en ejecución


/*Programa que encuentra umeros primos 16-Abril-2015

Blog de Rincon Informatico
Juan Lopez

  DESCRIPCION
  El programa genera una lista de numeros primos desde el 2 hasta el valor que ingrese el usuario
  en base a las condiciones de numero primo

  Condiciones del numero primo
  1.-Divisible entre 1
  2.-Divisible entre si mismo

  Los números primos menores que 100 son los siguientes:
  2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89 y 97
 
*/


#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<Windows.h>

#define MAX 1000   //Valor primo maximo a calcular

int main()
{
int i, j, contPrimo = 0;   //variables de control de los ciclos
int prim[MAX] = {0};

    int num1,a;

char salida;

system("cls");
system("color F9");

do{ //inicio de la ejecucion del programa

contPrimo = 0;  //reseteo del contador
system("cls");


printf("\n\tPrograma de numeros primos\n");

a=0;   //inicializacion del contador

do{  //verificar el valor minimo a introducir

printf("\n\t*.-Introduce un numero: Valor Max %d = ", MAX);
scanf("%d",&num1);

if(num1 <= 2 && num1 >= MAX)
printf("\n\tLos primos comienzan a partir del numero 2\n");

}while(num1 <= 2 && num1 >= MAX);

//Generacion de la tabla de numeros primos
getchar();
printf("\n\n*.-Lista de valores de numeros primos\n\n");
for(i = 2; i <= num1; i++){

for(j = 1;j <= i; j++)
{
if( i % j == 0) // si num1 módulo de i es 0, incrementamos a en 1.
a++;
}


if(a==2) /*Si al final del bucle, a vale 2, el número es primo, porque tiene solamente 2 divisores. */
{
printf(" %3d ", i);  //valor primo
a=0;

prim[i -2] = i;   //guardar el valorm primo
contPrimo++;

}else{
printf(" %3c ", 'X'); //valor no primo
a=0;
}


if((i % 10) == 0)  // nueva linea
printf("\n");

}
printf("\n\n\tLista de primos 2-%d contiene %d primos \n\tmostrados en la siguiente secuencia.\n\n", num1, contPrimo);
for(i = 0; i <= num1; i++){

if(prim[i] != 0)
 printf( "%2d ", prim[i]);
         

// if((i % 10) == 0)  // nueva linea
// printf("\n");
}


printf("\n\n\t\aDesea una nueva ejecucion(S/N): ");
salida = getch();
salida = tolower(salida);

//reinicializacion de contadores


}while(salida == 's' || salida == 'S');



printf("\n\n\tFin de la ejecucion ...\n");

contPrimo = 0;  //reseteo del contador

getchar();

return 0;
}//fin de main



1 comentario:

  1. Es un programa muy bien elaborado. funciona perfectamente. lo voy a estudiar para comprenderlo bien. Muchas Gracias por el tiempo invertido y el deseo de compartir.

    ResponderEliminar