mayor divisor primo

Iniciado por mariano96, 13 Febrero 2015, 22:14 PM

0 Miembros y 1 Visitante están viendo este tema.

mariano96

Tengo que obtener el mayor divisor primo dado un numero n pero no me sale:

Código (cpp) [Seleccionar]
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

rir3760

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

mariano96