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.
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
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