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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


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

Desconectado Desconectado

Mensajes: 83



Ver Perfil
Conjetura de Goldbach en C++
« en: 27 Julio 2015, 20:41 pm »

Buenas, aquí sigo con programación I. Tengo que hacer un ejercicio en el que hay que introducir un número n, par, en el teclado y descomponerlo en la suma de 2 números primos.
Lo único que puedo manejar son bucles y crear subprogramas.

Código
  1. /*
  2. 8) Defínase una función sin resultado factorizar(n) que calcule los factores primos de su
  3. argumento n para números mayores o iguales que 2 y los escriba en la pantalla. Defínase
  4. también otra función sin resultado sumaDePrimos(n) que descomponga un número n par
  5. y mayor que 2 en suma de dos números primos y los presente en pantalla. (Según la
  6. conjetura de Goldbach, todo número par mayor que 2 siempre se puede descomponer en
  7. suma de dos números primos).
  8. */
  9.  
  10. #include <iostream>
  11. using namespace std;
  12.  
  13. void factorizar(int n){
  14.    for(unsigned a=3; a<n; a++){
  15.        if(n%a==0) cout<<a<<endl;
  16.    }
  17.  
  18. }
  19.  
  20. //--------------------------------------------------------------
  21.  
  22. void sumadeprimos(int n){   //ESTO ES LO QUE TENGO MAL, HABIA PENSADO QUE SE FUERA COMPROBANDO
  23.                                   // LA SUMA DE DOS PRIMOS HASTA QUE FUERA IGUAL A "n" PERO O SE PASA DE "n" O NO LLEGA
  24.    int suma=0;
  25.    if(n%2==0){  //si n es par
  26.        int contador=0;
  27.  
  28.        while(suma<n){ //bucle que controla la suma y se tendría que ejecutar hasta que se cumpliera la conjetura de Goldbach
  29.            int a=3;
  30.  
  31.            while(contador<2 and a<n){  //bucle en el que se va haciendo la suma de primos. "contador" se reinicia cada 2 ciclos
  32.                if(n%a==0){
  33.                    suma+=a;
  34.                    ++contador;
  35.                        cout<<suma<<endl;
  36.                }
  37.                ++a;
  38.            }
  39.            contador=0;
  40.        }
  41.    }
  42.    cout<<suma<<endl;
  43. }
  44.  
  45. //-------------------------------------------------------------------
  46.  
  47. int main(){
  48.    int n;
  49.    cout<<"n = ";
  50.    cin>>n;
  51.    cout<<"Factores primos de n: "<<endl;
  52.    factorizar(n);
  53.    cout<<endl;
  54.    cout<<"Descomposicion en la suma de 2 factores primos de n par "<<endl;
  55.    sumadeprimos(n);
  56.  
  57.  
  58.  
  59. return 0;
  60. }
  61.  


« Última modificación: 27 Julio 2015, 20:49 pm por seryioo » En línea

joecarl

Desconectado Desconectado

Mensajes: 24



Ver Perfil
Re: Conjetura de Goldbach en C++
« Respuesta #1 en: 27 Julio 2015, 23:45 pm »

Haz una función que compruebe si un número es primo.
Haz otra función que recorra todos los número menores que "n", en cada iteración usa la función q creaste para comprobar que tanto " i" como "n - i" son primos. Pseudo código:

HallarSuma(int n)
  Para i =0 hasta n
    Si esPrimo(i) y esPrimo(n-i)
      Mostrar i y n-i
    Fin si
  Fin para
Fin hallarSuma


En línea

seryioo

Desconectado Desconectado

Mensajes: 83



Ver Perfil
Re: Conjetura de Goldbach en C++
« Respuesta #2 en: 28 Julio 2015, 10:17 am »

Vale, algo más claro, pero sigo teniendo la duda de cómo hacer la función "sumadeprimos" ya que tendría que hacer combinaciones de 2 números primos hasta que su suma fuera n, pero no se como hacer eso.

Adjunto el código.

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. void factorizar (int n);
  5.  
  6. void sumadeprimos(int n);
  7.  
  8. int primo(int n);
  9.  
  10. //---------------------
  11.  
  12. int main(){
  13.    int n;
  14.    cout<<"Introduce n: ";
  15.    cin>>n;
  16.    cout<<"Factores primos de n:"<<endl;
  17.    factorizar(n);
  18.  
  19.  
  20.  
  21. return 0;
  22. }
  23.  
  24. //----------------------
  25.  
  26. int primo(int m){
  27.    int incremen=2;
  28.    bool primo=true;
  29.    while(primo && incremen<m){
  30.        if(m%incremen==0) primo=false;
  31.        ++incremen;
  32.    }
  33.    if (primo) return m;
  34.    else return 0;
  35. }
  36.  
  37. void factorizar (int n){ //factores primos de su argumento n para números mayores o iguales que 2 y los escriba en la pantalla.
  38.   for(unsigned m=3; m<n; m++){
  39.        if (primo(m)!=0) cout<<primo(m)<<endl;
  40.   }
  41. }
  42.  
  43.  
  44. void sumadeprimos(int n){ //descomponga un número n par y mayor que 2 en suma de dos números primos y los presente en pantalla.
  45.    if(n%2==0){ //ok
  46.  
  47.    }
  48.  
  49. }
« Última modificación: 28 Julio 2015, 10:22 am por seryioo » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Conjetura de Goldbach en C++
« Respuesta #3 en: 28 Julio 2015, 11:15 am »

sobre el numero primo, este es el algoritmo que llevo usando un tiempo por cosas de eficiencia :P

Código
  1. int primo(int n){
  2. int i;
  3. if(n<=3) return n>=2;
  4.  
  5. if(n%2==0 || n%3==0) return false;
  6.  
  7. for(i=5;i*i<=n;i+=6){
  8. if(n%i==0 || n%(i+2)==0) return false;
  9. }
  10. return true;
  11. }


para sumadeprimos, recomiendo lo siguiente

sabemos que n debe ser par, los 2 números mayores que suman uno par, es el numero /2

de ahí puedes empezar a buscar por el numero/(2-i), siendo i=1 al inicio, el otro numero es eso numero-(numero/(2-i))... así vas incrementando 1 a i para ver si es suma de 2 primos... si numero/2-i==1, no existen 2 primos que sumados den tu resultado


« Última modificación: 28 Julio 2015, 11:27 am por engel lex » En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
joecarl

Desconectado Desconectado

Mensajes: 24



Ver Perfil
Re: Conjetura de Goldbach en C++
« Respuesta #4 en: 28 Julio 2015, 11:19 am »

Tal y como te indiqué en el pseudocode:

HallarSuma(int n)
  Para i =2 hasta n
    Si esPrimo(i) y esPrimo(n-i)
      Mostrar i y n-i
    Fin si
  Fin para
Fin hallarSuma

Que sería:
Código
  1. void sumadeprimos(int n){
  2.  int i;
  3.  for(i=2;i<n;i++){
  4.    if (primo(i) && primo (n-i)){
  5.      cout << n << " = " << i << " + " << n-i << endl;
  6.    }
  7.  }
  8. }

No he probado el código pero imagino que funcionará, ese código es que invertirá menos tiempo en ejecutarse pero quizá haya que refinarlo un poco.

EDIT: he cambiado i=0 por i=2 como condicion inicial en el for ya que ni el 0 ni el 1 son primos segun wikipedia.
« Última modificación: 28 Julio 2015, 11:22 am por joecarl » En línea

seryioo

Desconectado Desconectado

Mensajes: 83



Ver Perfil
Re: Conjetura de Goldbach en C++
« Respuesta #5 en: 28 Julio 2015, 11:43 am »

Si, tu codigo funciona perfectamente, ahora estoy intentado entenderlo...

No entiendo bien qué se está haciendo en el if y por qué un primo es primo(i) y otro primo(n-i)

PD: Vale , ya se lo que haces

Gracias engel lex y joecarl
« Última modificación: 28 Julio 2015, 12:01 pm por seryioo » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
La conjetura de Goldbach
Programación C/C++
ysoledad 6 5,623 Último mensaje 1 Mayo 2013, 15:34 pm
por pacoperico
[Python] Conjetura del Goldbach
Scripting
Karcrack 0 6,106 Último mensaje 7 Julio 2010, 10:37 am
por Karcrack
[Source] Algoritmo Conjetura de Goldbach
Java
juancaa 0 8,797 Último mensaje 10 Noviembre 2012, 22:05 pm
por juancaa
(AYUDA) conjetura de goldbach
Programación Visual Basic
jpablom95 3 3,411 Último mensaje 3 Mayo 2013, 22:51 pm
por Elemental Code
Ayuda c++ conjetura de Goldbach
Programación C/C++
shanse 1 1,939 Último mensaje 19 Noviembre 2018, 10:05 am
por K-YreX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines