Ejercicio 10

Re: Ejercicio 10

de Eduardo Fernandez -
Número de respuestas: 0
Hola,
Recién veo tu pregunta. Perdoná que respondamos tan tarde.
No ejecuté tu código pero a simple vista me parece muy "ineficiente" y te explico por qué.
Vos utilizas un doble while anidado y probas con todas las combinaciones de primos entre 2 y x-2 y preguntás si alguna de esas combinaciones suma x. A su vez antes generaste toda la lista de primos entre 2 y x-2.

Pero si tomás un primo p de esa lista, ya sabés cuál sería el numero a probar (x-p).

Entonces, es mucho mejor si utilizás un único while donde, dado x, probás con todos los i enteros tales que i <= x-i (con i>=2). Preguntás si i y x-i son primos (con la función isprime). Como es un while, podés parar apenas encuentres un par de primos. Esto es incluso mejor que llamar a listar_primos(), dado que en este último caso obligatoriamente tenés que buscar todos los primos entre 2 y x-2.
Además el código queda mucho más sencillo.  

Sobre tu duda de existen y ~existen pensalo así: Mientras no existe el par de primos que suman x sigo iterando. Quizá en lugar de "existen" le pondría de nombre "encontré" a la variable: Mientras no encontré (~encontre) el par de primos que suma x, sigo iterando. Cuando encontré (encontre==1 o ~encontre==0), salgo del while.

Espero haber sido claro. Cualquier cosa no dudes en preguntar.
Eduardo