Tengo que obtener el mayor divisor primo dado un numero n pero no me sale:
bool esPrimo(int n){
bool numPrimo;
int i;
numPrimo = false;
int m = 0; // los nº primo solo tienen dos divisores: el mismo y 1. si se pasa no es primo
bool primoEncontrado = false;
for (i = 1; n % i == 0 && !primoEncontrado; i++){
if (n%i>0){
numPrimo = false;
primoEncontrado = false;
}
else{
numPrimo = true;
primoEncontrado = true;
}
}
return numPrimo;
}
int mayorDivisorPrimo(int n){
int i,mayor;
mayor = 0;
for (i = 1; i <= n; i++){
if (n%i == 0){
if (esPrimo(i) == true){
if (i > mayor){
mayor = i;
}
}
}
}
return mayor;
}
Mod: Tema modificado evita escribir en mayúsculas (título) y usa etiquetas GeSHi para mostrar tu codigo
Lo primero que debes hacer es corregir la función "esPrimo" ya que esta no da el resultado correcto:
/* 1) Supongamos que n es igual a 8 ... */
for (i = 1; n % i == 0 && !primoEncontrado; i++){
if (n%i>0){ /* 2) El residuo de la division 8 / 1 es mayor que cero? No ... */
numPrimo = false;
primoEncontrado = false;
}else { /* 3) Se ejecuta esta parte y se termina el bucle indicando que 8 es primo */
numPrimo = true;
primoEncontrado = true;
}
}
La forma mas simple (por supuesto no la mas eficiente) de implementar esa funcion es:
bool esPrimo(int n) /* n >= 2 */
{
int i;
for (i = 2; n % i != 0; i++)
;
return i == n;
}
El siguiente paso es verificar la función "mayorDivisorPrimo" (esta la puedes reducir mediante la factorizacion de primos).
Un saludo
Muchas gracias crack!!