Ayuda, programa C++ para calcular numeros primos

Bien, lo que yo quiero conseguir con este programa, es que me de todos los numeros primos hasta el que se indique, por ejemplo si el usuario le introduce un 8, el ordenador tendria que devolver: 1,2,3,5,7 vamos, los numeros primos entre el 1 y el 8, mi programa de momento esta asi, haber si me podeis ayudar:
#include

void primo (int matriz [255], int num){

int a;
int i;
int divisores;

a=0;

for(i=1;i<=num;i++) {
divisores=0;
if(num%i==0) {
divisores=divisores+1;
}
}
if(divisores!=2) {
matriz[a]=i;
a = a +1;
}
}

int main (){
int numero;
int a;
int matriz [255];
printf ("introduce numero\n");
scanf ("%d",&numero);

primo (matriz,numero);

for (a=0; a
printf ("muestra por pantalla los numeros: %d\n", matriz[a]);
}

return 0;
}
A ver si te puedo ayudar; segun veo en el algoritmo la funcion primo lleva la cuenta de cuantos numeros primos hay y luego cuando a pasado de 2 los guardas en una tabla.
El problema viene en el main pk tu lees en la tabla hasta la posicion "valor de entrada" pero puede ser que solo hubiese 3 primos dentro, asi k se producira un error.
Mi recomendacion es k lo hicieses de una de estas formas:
1) en el main simplemente az la llamada a la funcion; que sea una funcion auxiliar con un bucle for la que vaya buscando los numeros primeros a traves del resto de la division y los vaya imprimiendo en el mismo bucle. Esto seria en caso k no te interesase para nada mas los numeros primeros.
2) otra opcion es aprovechar al maximo lo k tienes. Declarar una variable global "a" que la utilices para la tabla y asi no pasarte. O bien utilizar en vez de una tabla, una pila o cola, al gusto del consumidor.

Si no tienes interes por utilizar todos los datos hazlo de la primera forma, asi te ahorras el for de main.
Bien, por si no lo sabias hay un algoritmo que te sirve exactamente para lo que quieres, por si no lo conoces te dejo un link a la Criba de Eratostenes.

Por otra parte, siento decirlo, pero así de entrada no te va a funcionar, jeje.

Bien, veamos, en el printf, imprimes (si el usuario te pasa un 8) los 8 primeros numeros de la matriz, cuando tu quieres que imprima solo los que son primos de esos 8, ¿no?

Te aconsejo que definas la función primo como "int primo (int matriz [255], int num);" y que al final de la función hagas un "return a;" y en el main la asignes a "numero".

Bueno, a bote pronto es lo que encuentro mal del código.
Suerte con C

[bye]
2 respuestas