Ver Mensaje Individual
  #4 (permalink)  
Antiguo 06/08/2008, 16:42
yackcae
 
Fecha de Ingreso: junio-2008
Mensajes: 63
Antigüedad: 15 años, 11 meses
Puntos: 2
Respuesta: Ayuda con codigo!!!!

El problema está en como se define si un número es primo o no:

nprim=(valor[i][j]%2)*1; // la multiplicación por 1 no hace absolutamente nada, todo número multiplicado por 1 da ese mismo número, por lo que nprim es el resto de la división del número entre 2.
if(nprim==1) // Solo se está comprobando que el resto de la división sea igual a 1, que en el caso de un número impar siempre será así ya que el resto de una división entre 2 solo puede ser 0 ó 1, siendo 1 si el número es impar y 0 si es par.

que es lo mismo que para los impares (solo que expresado de forma diferente):

numip=(valor[i][j]%2)-1; // El resto es 0 ó 1, al restarle 1 los pares son -1 y los impares 0
if(numip==0)

El comprobar si un número es primo no es una tarea simple:
http://es.wikipedia.org/wiki/Test_de_primalidad
http://es.wikipedia.org/wiki/Criba_de_Erat%C3%B3stenes

Sin embargo se podría resolver de una forma simple partiendo del hecho de que los números primos son mayores que 1, que son divisibles únicamente por sí mismos y por la unidad, usando la siguiente función:

Código:
bool esprimo(int N)
{
	if(N<=1) return false; // un primo debe ser mayor que 1
	for(int divisor=N-1; divisor>1; divisor--) {
		if(N%divisor==0) return false; // Si el número es divisible entre otro menor que él ya no es primo
	}
	return true;
}
Claro que no será el método más eficiente para determinar si un número muy grande es primo, pero funcionará.

Y por supuesto habría que cambiar el if de la función nprimos:

Código:
...
	//nprim=(valor[i][j]%2)*1;
	//if(nprim==1)
	if(esprimo(valor[i][j]))
...