Duda con ejercicios de programacion (c++)

B

Siento no poner el codigo con formato pero es que no me deja este editor.
El primero me compila pero se queda pensando xD y el segundo directamente es que no se por donde meterle mano.
Si me puede dar alguien una idea o explicarme un poco el codigo a usar se lo agradezco

El primero es

La conjetura de Goldbach dice que todo número par mayor que 2 tiene la propiedad de que es la suma de dos números primos. Diseña un algoritmo que compruebe si dicha conjetura es cierta para todos los números pares comprendidos entre dos números leídos por teclado.
Ejemplo. Para los números pares comprendidos entre 3 y 12, se cumple la conjetura: 4 = 2 + 2 6 = 3 + 3 8 = 3 + 5 10 = 3 + 7 12 = 5 + 7 Por lo que la ejecución del programa mostraría por pantalla : Introduzca límite inferior: 3
Introduzca límite superior: 12
Todos los pares en el rango elegido cumplen la conjetura

#include <iostream>
using namespace std;

void leerLimites (unsigned& x,unsigned& y){
do{
cout<<"Introduzca dos numeros (el primero menor que el segundo)";
cin>>x>>y;
}while (x>y);
}

unsigned sacarPares (unsigned x){
if(x%2==0){

    return x;
}

}

unsigned sacarPrimos (unsigned x,unsigned p){
unsigned z;
while (sacarPares(x)%p==0){
//x=x/p;
z=sacarPares(x);
z=z/p;

}
return p;
}

int main (){
unsigned suma,j,p,x,y,primo;
suma=0;
j=0;
p=2;
leerLimites(x,y);
for(unsigned cont=x;cont<=y;cont++){
for(unsigned p=2;p<=cont;p++){
primo = sacarPrimos(cont,p);
suma+=primo;
}
if(suma==cont){
j++;
}
}
if(j==(y+1-x)/2){
cout<<"Todos los pares en el rango elegido cumplen la conjetura";
}
return 0;
}

El segundo dice:

Escribe un programa que acepte como entrada desde teclado un número natural mayor que cero
y dé como salida el resultado de sumar dos a dos los dígitos que aparecen en posiciones
simétricas respecto al dígito central dentro del número dado como entrada. Por ejemplo :
para el número : 2354869
la salida es: 2+9 = 11, 3 + 6 = 9, 5 + 8 = 13, 4
para el número : 6582
la salida es : 6 + 2 = 8, 5 + 8 = 13

#include <iostream>
using namespace std;
void leerNumero(unsigned &n){
do{
cout<<"Introduzca un numero (mayor o igual que 1)";
cin>>n;
}while (n<1);
}

unsigned obtenerDigitos(){
while (n!=0){
a=n%10;
n=n/10;
}
return a;
}

void calculardosAdos (){
}

void mostrarSuma(){
}

B

#1 En el segundo podrías probar a utilizar arrays, de manera que cada numero pueda ser identificado por una posición del array, así podrías acceder con mayor facilidad a ellos y hacer las operaciones pertinentes.

1 respuesta
B

#2 es que arrays doy en el siguiente tema. este lo tengo que hacer sin arrays

B

Yo lo hacía en C#, pero vamos, un bucle de numeros entre los 2 leídos por teclado y un if por cada numero par y ya está

1 respuesta
Mewtwo

No entiendo lo que haces en el primero, intenta copiarlo si ntanto espacio o cosa rara a ver si me aclaro

B

#1 Coincido con #4. Solo has de comprobar si el numero es par, de ser asi, seguir diviendiendo hasta quedarte solo con números primos. Un bucle, y un par de if anidados.

EJ: 48 -> 24 + 24 -> (12 + 12 ) + ( 12 + 12 ) -> ((6+6)+(6+6))+((6+6)+(6+6)) .... ETC

2 respuestas
Fyn4r

#6 pero eso no tiene mucho sentido, quiero decir, si sigues desarrollando esa suma da cualquier cosa menos una suma de 2 primos

1 respuesta
Mewtwo

#6 igual que #7 no tiene sentido tu quieres saber si un par es la suma de dos primos que pueden ser distintos.

Para empezar miras cual es el primer numero par y a partir de hay en for incrementas de 2 en 2 te ahorras mirar todos los numeros.

Luego de cada numero par coges el primer primo con la siguiente formula( 2elevado a n) -1 con esto sacas todos los primos y un bucle empiezas restando el numero primo al par y compruebas que el resultado es primo.

Y asi lo vas sacando todo sin arrays

Usuarios habituales

Tags