Ayuda con la tarea: Identificador de números primos C++

Mi tarea para esta tarea es tomar entradas interminables de un usuario (ctrl-d terminado) y devolver una respuesta si el número ingresado es un número primo. El giro de esto es que en lugar de usar la función % para todos los números <= la raíz cuadrada del número ingresado, debo hacer una lista de números primos que cubra el número ingresado (si el número ingresado es 6, la lista debe contiene 2,3,5 y 7), busca linealmente a través de la lista y devuelve verdadero si el número ingresado está en dicha lista. También debe estar en una clase.

Esta es mi función Isprime.

bool isprime::Isprime(int N){
  int i,primenum,max=1;
  int prime[max];
  prime[0]=2;
  for(primenum=3;prime[max-1]<N;primenum++){
    for(i=2;i<primenum;i++){
      if(primenum%i!=0){
        max++;
        prime[max-1]=primenum;
      }
  }
  for(int j=0;j<max;j++){
    if(N==prime[j])
      return true;
  }
  return false;
}

Cuando ejecuto el programa, el único número que devuelve el resultado deseable es 2 (el que puse inicialmente en la lista. ¿Qué estoy haciendo mal aquí? Gracias por su aporte por adelantado.

Edición 1: cuando el usuario está ingresando números, si la función Isprime devuelve verdadero, se genera un cout simple << N << " es un número primo". Eso es lo que quise decir con salida deseable.

Edición 2: después de editar mi función debido a algunos errores por descuido, TODOS los enteros de entrada se vuelven verdaderos.

preguntado el 29 de septiembre de 13 a las 22:09

¿Puede aclarar cuál es su resultado esperado? -

Cuando el usuario ingresa números, si la función Isprime devuelve verdadero, se genera un simple cout << N << " es un número primo". -

Por ejemplo, cuando un usuario escribe "4" y pulsa Intro, no sale nada. Pero luego, cuando escriben "3" y presionan enter, dice "3 es un número primo". -

Y la única vez que obtiene el resultado correcto es cuando el usuario ha ingresado 2? De lo contrario, la salida es incorrecta? -

Correcto. La única vez que se muestra el cout es cuando escribo 2. Cada vez que escribo 2. -

1 Respuestas

Al menos dos errores en su código original:

En tu código, max=2 y nunca cambió. El primero for pruebas de bucle prime[1] < N que no está inicializado. Después prime[1] ha sido asignado muchas veces por algunos números no primos.

por ejemplo, en su primer ciclo, i y primenum son

i = 2, primenum = 3, prime[1] = 3
i = 3, primenum = 4, prime[1] = 4
i = 4, primenum = 5, prime[1] = 5 
...

Ahora tu nuevo código también tiene errores.

int i,primum,max=1; int prima[máx];

tu defines uno int arreglo primo con solo one elemento. Luego intentas acceder a él como si tuviera más. Esto está mal.

Y lo siguiente no es lo que quieres

for(int j=0;j<max;j++){
   if(N==prime[j])
       return true;
}

porque como dije arriba, primo[i] para i>0 no es valido.

Respondido el 29 de Septiembre de 13 a las 23:09

He editado la función y ahora todos los números se vuelven verdaderos. ¿Qué he hecho mal ahora? - jake hafendorfer

He editado aún más después de darme cuenta de más errores, pero sigo teniendo el mismo problema: todas las entradas ahora vuelven a ser verdaderas. - jake hafendorfer

Cuando agrego al máximo, ¿no cambia el tamaño de la matriz? - jake hafendorfer

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.