Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: mariano96 en 13 Febrero 2015, 22:14 pm



Título: mayor divisor primo
Publicado por: mariano96 en 13 Febrero 2015, 22:14 pm
Tengo que obtener el mayor divisor primo dado un numero n pero no me sale:

Código
  1. bool esPrimo(int n){
  2. bool numPrimo;
  3. int i;
  4.  
  5. numPrimo = false;
  6. int m = 0; // los nº primo solo tienen dos divisores: el mismo y 1. si se pasa no es primo
  7. bool primoEncontrado = false;
  8.  
  9. for (i = 1;  n % i == 0 && !primoEncontrado; i++){
  10.  
  11. if (n%i>0){
  12. numPrimo = false;
  13. primoEncontrado = false;
  14. }
  15. else{
  16. numPrimo = true;
  17. primoEncontrado = true;
  18. }
  19. }
  20. return numPrimo;
  21. }
  22.  
  23.  
  24. int mayorDivisorPrimo(int n){
  25. int i,mayor;
  26.  
  27. mayor = 0;
  28.  
  29. for (i = 1; i <= n; i++){
  30. if (n%i == 0){
  31. if (esPrimo(i) == true){
  32. if (i > mayor){
  33. mayor = i;
  34. }
  35. }
  36. }
  37. }
  38. return mayor;
  39. }
  40.  

Mod: Tema modificado evita escribir en mayúsculas (título) y usa etiquetas GeSHi para mostrar tu codigo


Título: Re: mayor divisor primo
Publicado por: rir3760 en 14 Febrero 2015, 05:14 am
Lo primero que debes hacer es corregir la función "esPrimo" ya que esta no da el resultado correcto:
Código
  1. /* 1) Supongamos que n es igual a 8 ... */
  2. for (i = 1;  n % i == 0 && !primoEncontrado; i++){
  3.   if (n%i>0){ /* 2) El residuo de la division 8 / 1 es mayor que cero? No ... */
  4.      numPrimo = false;
  5.      primoEncontrado = false;
  6.   }else { /* 3) Se ejecuta esta parte y se termina el bucle indicando que 8 es primo */
  7.      numPrimo = true;
  8.      primoEncontrado = true;
  9.   }
  10. }

La forma mas simple (por supuesto no la mas eficiente) de implementar esa funcion es:
Código
  1. bool esPrimo(int n) /* n >= 2 */
  2. {
  3.   int i;
  4.  
  5.   for (i = 2; n % i != 0; i++)
  6.      ;
  7.  
  8.   return i == n;
  9. }

El siguiente paso es verificar la función "mayorDivisorPrimo" (esta la puedes reducir mediante la factorizacion de primos).

Un saludo


Título: Re: mayor divisor primo
Publicado por: mariano96 en 24 Febrero 2015, 02:01 am
Muchas gracias crack!!