Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: chewbaccaChaka en 18 Abril 2018, 19:33 pm



Título: Duda con programa, de numeros primos
Publicado por: chewbaccaChaka en 18 Abril 2018, 19:33 pm
Buenas tardes,
Quisiera un poco de ayuda, tengo un problema, hacer un programa que imprima los numeros primos que esten en los primeros 100 numeros,
Lo que no se es como guardarlos en el arreglo para posteriormente imprimirlos,
Soy nuevo en esto,
gracias y saludos
El codigo que realize es el siguiente,
Código
  1. #include <stdio.h>
  2. int main ()
  3. {
  4. int x[100]={0},i,z,a=0;
  5.  
  6. for (z=2;z<100;z++) //Conte a partir del 2, ya que el 1 no es numero primo
  7. {
  8. for (i=1;i<=100;i++)//Numeros que dividen
  9. {
  10. if(z%i==0) //operacion para saber si son primos
  11. {
  12. a=a+1;
  13. }
  14.  
  15. }
  16. }
  17.  
  18. if(a==2)
  19. {
  20. a=x[z];
  21. printf("Los numeros primos del uno al 100 son: %d",x[z]);
  22. }
  23. return 0;
  24. }


Título: Re: Duda con programa, de numeros primos
Publicado por: animanegra en 18 Abril 2018, 19:50 pm
Te comento mi punto de vista,
Parece que no tienes dudas con como imprimir si no con el propio algoritmo de calculo de los primos. Igual no necesitas si quiera el array.

Mi sugerencia.

Haz primero un programa para saber si un numero dado por la variable z es primo o no. En caso de ser primo lo imprimes en pantalla.

Cuando ya tienes hecho eso, solo tienes que repetir lo mismo (todo ese programa que te imprime z cuando es primo) para z desde 1 hasta 100.

Bajo mi punto de vista, deberias de afrontar los problemas dividiendolos en subproblemas no como un todo completo.



Título: Re: Duda con programa, de numeros primos
Publicado por: engel lex en 18 Abril 2018, 19:55 pm
hola! antes de hacer un programa siempre es bueno leer información relacionada, incluso tan simple como esto...

lo que te dirá cualquier articulo es que
- un numero siempre tendrá divisores iguales o menores a su raiz
- uno no es primo
- ningún par (mas que el 2) es primo

así que... una formula general para buscar numeros primos es

Código:
posible_primo = x
si x es 2, es primo (terminar programa)
si x es par, no es primo (terminar programa)
si x es 3, es primo (terminar programa)

entero i
para i desde 3, hasta i menor o igual que la raiz de x{
    si x es multiplo de i, no es primo (terminar programa)
    i = i+2
}
x es primo (terminar programa)
 

como la operación de raiz usualmente es "complicada" se invierte el sentido en "i menor o igual que la raiz de x" a "i*i menor o igual que x"



ahora con tu problema... lo más practico para resolverlo es agregar una variable que llamaremos "contador", esta empieza en 0 y cada vez que consigas un primo le sumas uno

Código
  1. int primos[100];
  2. int i;
  3. int contador = 0;
  4. for(i = 2; i < 100; i++ ){
  5.  if( es_primo(i) ){ //aquí tus operaciones, yo lo estoy resumiendo
  6.    primos[contador] = i;
  7.    contador++;
  8.  }
  9. }
  10.  
  11. printf("los numeros primos conseguidos son: ");
  12. for(i = 0; i < contador; i++){
  13.  printf("%i, ", primos[i]);
  14. }


Título: Re: Duda con programa, de numeros primos
Publicado por: MAFUS en 18 Abril 2018, 21:42 pm
Bueno, en verdad tiene razón. Ir poniendo en un array o lista los números primos encontrados desde el 2 se puede llegar a acelerar la búsqueda de los sucesivos. Atendiendo a que la factorización se hace con primos, si buscando primos que son divisibles se llega al final de la lista sabemos que el número sobre el que se pregunta es primo. Incluso se puede acelerar más si llegado a un primo de la lista, su cuadrado es mayor al número en cuestión; se puede decir entonces que ese número es primo.