Programación General > C/C++

 Numeros Primos.

(1/2) > >>

JoRDi-18:
Hola:

Necesito un algoritmo que, dado un numero natural n, muestre por pantalla los n primeros números primos.

He intentado hacerlo pero me estoy volviendo loco y no tengo ni idea de cómo seguir. Alguien me puede ayudar? Pongo lo que tengo hecho, pero esque no me sirve... Ayudadme por favor!!


--- Código: Text --- #include <stdio.h>#include <stdlib.h> void Fprimos (int num, int vector[]); int cont=1; int i=1; int main (){   int n;  int num=1;    int vector[1000]={1};      printf ("Muestra por pantalla de los n primeros numeros primos.");   printf ("\n\nIntroduce el numero n de numeros primos que mostrare: ");   scanf ("%d", &n);   while (cont <= n){      Fprimos (num, vector);      num++;   }      printf ("\nLos %d primeros numeros primos son: ", n);   for (i=0; i<=cont; i++){      printf ("%d", vector[i]);   }} void Fprimos (int num, int vector[]){   for (i=1; i <= cont; i++){      if (num%vector[i]!=0){         if (i==cont){            vector[cont]=num;            cont++;         }      }else{         if (i==cont) return;      }   }}       

GhostGirl:
Hola!!!!. Un programilla que te imprime los n primeros números primos es:

#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>

int main()
{
      int n, j, divisores, numero, total_primos;
      // Leemos el valor de n
      fprintf(stdout,"Valor de n = ");
      scanf("%d",&n);

      total_primos = 0;  // Controla el total de primos
      numero = 1;        // Controla los números a analizar

      // Ciclo para obtener los 'n' números primos
      while (total_primos < n)
      {
          divisores = 0;      // Cuenta el número de divisores

          // Para que un numero sea primo, no se deben encontrar divisores entre 2 y n-1
          for(j=2;j<numero;j++)
          {
               if ( (numero % j) == 0) divisores++;
          }

          // Controla el numero de divisores encontrados
          if (divisores == 0)
          {
               total_primos++;
               fprintf(stdout,"Primo Nro. %d es %d\n ",total_primos,numero);
          }
          // Pasa al siguiente numero
          numero++;
      }
      system("PAUSE");
      return 0;
}

La idea es considerar que un numero primo es aquel que es sólo divisible por 1 y por si mismo, es decir que no deben haber divisores dentro del rango [2, x-1] para todo x.

Espero que te sirva de algo

Saludos

--
Yasna Meza Hidalgo

shephiroth:
buenas. Peazo codigos grandes que poneis. Aqui te pongo una funcion recursiva pequeñita que devuelve el proximo numero primo. Es decir, tu le pasas un numero (sobreentiende que es primo) y te muestra el siguiente.

int primoRecursivo(int num)
{
num++;
bool primo=true;
for (y=2;y*y<=num && primo;y++)
     if (num%y==0) primo=false;
if (primo)
     return num;
else
     return primoRecursivo(num);
}

Si ahora, lo que quieres es mostrar x numeros primos con un simple bucle

primo=1;
for (z=0;z<x;z++)
{
primo=primoRecursivo(primo);
printf("Numero primo numero "+(z+1)+"es "+primo+"\n");
}

como veis este codigo es mucho mas reducido. Eso si, hay q entender recursivas xDD

EDITADO: la primera condicional de la recursiva tiene q ser <=, sino los numeros cuadrados (4,9,16,25...) los daría como primos xDD

GhostGirl:
Hola, mira tal vez tengas razón con respecto al largo del código, pero mi experiencia me ha indicado que cuando una persona se está iniciando en el mundo de la programación NO PUEDES hablarle de recursividad de buenas a primeras. El tema de la recursividad es algo complejo para quienes ya tienen un conocimiento de programación, imagina si se trata de alguien que recien se inicia ........

Saludos

--
Yasna Meza Hidalgo

QliX=D!:

--- Cita de: "shephiroth" --- buenas. Peazo codigos grandes que poneis. Aqui te pongo una funcion recursiva pequeñita que devuelve el proximo numero primo. Es decir, tu le pasas un numero (sobreentiende que es primo) y te muestra el siguiente.

int primoRecursivo(int num)
{
num++;
bool primo=true;
for (y=2;y*y<=num && primo;y++)
     if (num%y==0) primo=false;
if (primo)
     return num;
else
     return primoRecursivo(num);
}

Si ahora, lo que quieres es mostrar x numeros primos con un simple bucle

primo=1;
for (z=0;z<x;z++)
{
primo=primoRecursivo(primo);
printf("Numero primo numero "+(z+1)+"es "+primo+"\n");
}

como veis este codigo es mucho mas reducido. Eso si, hay q entender recursivas xDD

EDITADO: la primera condicional de la recursiva tiene q ser <=, sino los numeros cuadrados (4,9,16,25...) los daría como primos xDD
--- Fin de la cita ---
Hey mr...
Proba pidiendole a tu "funcion" el primo del numero 2000000 (dos millones)...

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa