SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Perrero en Sábado 3 de Junio de 2006, 21:51

Título: Otra Manera De Hallar Numeros Primos
Publicado por: Perrero en Sábado 3 de Junio de 2006, 21:51
Estoy aprendiendo C y hice un programa que haya los numeros primos del 0 al 100, de esta manera:

Código: Text
  1.  
  2. #include <stdio.h>
  3. #include <windows.h>
  4.  
  5. int main()
  6. {
  7.     int i;
  8.     for (i=0;i<=100;i++)
  9.         if ((i%2!=0) && (i%3!=0) && (i%5!=0) && (i%11!=0))
  10.            printf(" %i",i);
  11.         else if ((i==2) || (i==3))
  12.                 printf(" %i",i);
  13.     printf("\n\n");
  14.     system("pause");
  15.     return 0;
  16. }
  17.  
  18.  

Quisiera saber si se pueden hallar de otra manera, ya que esta no me parece muy "pensada" o es que acaso es una muy buena manera?... :hola:
Título: Re: Otra Manera De Hallar Numeros Primos
Publicado por: robbie110487 en Sábado 3 de Junio de 2006, 22:25
Encontre esta, pero en c++ y es de 20 a 100, ya solo tienes que pasarla a c, no es dificil

Código: Text
  1. #include<iostream>
  2. #include<iomanip>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {  
  8.    cout<<"Numeros primos entre 20 y 100:"<<endl;
  9.  
  10.    int i;
  11.    for(int n=23; n<100; n++)
  12.    {  
  13.       for(i=2; n%i; i++);
  14.       if(i==n) cout<<setw(4)<<n;
  15.    }
  16.    cout<<endl;
  17.    cin.get();
  18.    return 0;
  19. }
  20.  
Título: Re: Otra Manera De Hallar Numeros Primos
Publicado por: eTc en Domingo 4 de Junio de 2006, 15:14
A ver si te sirve este..
Código: Text
  1. #include <iostream>
  2. #include <math.h>
  3.  
  4. using namespace std;
  5.  
  6. bool esPrimer(int a) {
  7.      int i=1;
  8.      int b=(int)ceil(sqrt(a));    
  9.      do {
  10.          i++;
  11.      } while((a%i!=0)&&(i<=b));
  12. return (i>b);
  13. }
  14.  
  15. int main(int argc, char *argv[]) {
  16. int i,a=1,c=atoi(argv[1]);
  17. cout << 1;
  18. for (i=2;i<=c;i++) {
  19.  if (esPrimer(i)) { a++; cout << "," << i; }
  20. }
  21. cout << "." << endl;
  22. cout << "Numeros primeros encontrados entre 1 y " << c << ": " << a << endl;
  23. return 0;    
  24. }
  25.  
  26.  

Diría que los encuentra todos, entre 1 y un número que le pases por parámetro...
Su uso es ./programa MAX_NUMERO_QUE_QUIERAS_COMPROVAR, por ejemplo ./programa 1000 y te busca primos de 1 a 1000
Un saludo
Título: Re: Otra Manera De Hallar Numeros Primos
Publicado por: fuhrer en Lunes 5 de Junio de 2006, 22:05
Hola, que tal.

Para encontrar número primos dado un número, existen varias maneras de hacerlo, pero principalmente se maneja una forma estandar de hacer esto, la cual te garantiza un error muy pequeño, además que este algorítmo es utilizado por programas matematicos como Matlab, Maple, Matematica, entre otros.

El algoritmo es el de Miller Rabin, lo que hace este algorítmo es decir si algún número es primo o no y es demaciado rápido. Puedes buscarlo como Miller-Rabin primality test y encontraras el algorítmo.

Hasta luego.