elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  mayor divisor primo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: mayor divisor primo  (Leído 1,816 veces)
mariano96

Desconectado Desconectado

Mensajes: 9


Ver Perfil
mayor divisor primo
« 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


« Última modificación: 13 Febrero 2015, 22:24 pm por engel lex » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: mayor divisor primo
« Respuesta #1 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


En línea

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

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: mayor divisor primo
« Respuesta #2 en: 24 Febrero 2015, 02:01 am »

Muchas gracias crack!!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Descubren el mayor número primo: 17 millones de dígitos
Noticias
wolfbcn 2 2,356 Último mensaje 7 Febrero 2013, 22:31 pm
por anonimo12121
divisor binario de arreglo, no funciona
Electrónica
loml666 0 2,177 Último mensaje 4 Agosto 2013, 18:48 pm
por loml666
[Codigo] Interesante codigo imprime numero primo de mayor cifras
Programación C/C++
Miky Gonzalez 8 4,653 Último mensaje 13 Octubre 2013, 23:09 pm
por ivancea96
Divisor en VHDL
Electrónica
Casilda 0 3,757 Último mensaje 5 Junio 2014, 23:41 pm
por Casilda
Ayuda con un divisor de archivos
Programación C/C++
sabeeee 3 2,250 Último mensaje 31 Marzo 2015, 06:40 am
por crack81
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines