+O sea estos trabajos que te ayudan a pensar de forma lógica y a saber implementar las ideas que tienes en la cabeza son un coñazo y leerte un libro de 1000 páginas que ya adelantas ser "el asco teórico más grande" es mejor para alguien que está empezando?? Será buena idea si lo que quieres es que abandone la programación por parecerle "un coñazo".
-Sacar formulas de wikipedia no es implementar ideas que tienes en la cabeza. Hacer programas que se te ocurran tras leer un trozo pequeño de un libro teorico escrito por el creador de C++ sí. Asco de extenso, no asco de aburrido. Le recomendé uno más ameno de 296 paginas que explica absolutamente todo lo necesario para empezar mientras programas un videojuego. Quizás si lo primero que haces es crear un juego con una muy buena orientación le pilles más cariño al lenguaje que formulas matemáticas que de momento no te interesan para nada.
+En esa función <Potencia()> si tomas el caso de que exponente valga 0 de forma aislada (y no es un error eso) no tienes que inicializar <potencia> a 1 sino a <base> (es más puedes usar la propia variable base que no está pasada por referencia ni es constante para ahorrarte una variable y una iteración). Tal y como está implementado ahí, el bucle funciona también para el exponente 0 por lo que no es necesario tratarlo de forma aislada.
-Me refería a que el return 1 era para finalizar la funcion como un error. Aunque no sea eso lo que haga. No tenía ganas de incluir más codigo, ya que el programa imprime correctamente el resultado. Lo deje ahí como un complemento para si alguiem quiere tratar ese caso en específico de forma diferente a la implementada en el else.
+La función <esPrimo()> aparte de hacer iteraciones de más de forma innecesaria usa una variable para guardar true/false antes de retornar cuando se puede retornar el valor directamente. Y el <else> tampoco es necesario.
-Lo puse así para que entienda mejor el codigo.
+Ese programa no calcula los primos de Mersenne, calcula los números de Mersenne (no aseguras en ninguna parte que sean primos, es más, no lo son) por lo que los resultados no son correctos tampoco.
-Por lo que entendí de la formula en wikipedia, cualquier numero primo al que se le aplique la formula pasa a ser automáticamente un numero primo de Mersenne sin necesidad de nada mas. De no ser así con volver a llamar a la función EsPrimo ya estaría el problema solucionado. Pero consulte la salida de los valores de la variable que almacena los numeros primos de Mersenne y coincidian con los que encontre en google. Estás seguro de que son incorrectos? Porque también comprobé los 10 numeros perfectos en google y eran los mismos que me da la salida de mi programa.
+Y el uso correcto del <do while> es para bloques que deben ejecutarse una vez antes de comprobar la condición siempre, lo cual no es el caso. Para este caso por convención se emplea un <while>.
-Siempre uso el do while por si quiero meter en algún momento algún trozo de codigo que itere en caso de que no se cumpla la condición. Malos habitos.
+Al final los trabajos "coñazo" van a servir para ver los fallos que comete uno.
-Y los que no son coñazo tambien. Yo pico código palante, me da igual que no esté perfecto en uso de recursos. No trabajo ni voy a trabajar nunca para una empresa. Trabajo para mi y mis proyectos nunca van a requerir tanta eficiencia. Con que lo que salga en pantalla sea lo que quiero ver me vale.