Ayuda con la tarea: Identificador de números primos C++
Frecuentes
Visto 383 veces
0
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.
1 Respuestas
1
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 c++ class primes or haz tu propia pregunta.
¿Puede aclarar cuál es su resultado esperado? - nhgrif
Cuando el usuario ingresa números, si la función Isprime devuelve verdadero, se genera un simple cout << N << " es un número primo". - Jake Hafendorfer
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". - Jake Hafendorfer
Y la única vez que obtiene el resultado correcto es cuando el usuario ha ingresado
2
? De lo contrario, la salida es incorrecta? - nhgrifCorrecto. La única vez que se muestra el cout es cuando escribo 2. Cada vez que escribo 2. - Jake Hafendorfer