* el método main me parece correcto. creo que feriva se confunde, porque a pesar de ser correcto en el sentido que parece computar lo que quieres computar, está escrito de una forma confusa.
Hola, Luis. Es confuso, efectivamente, pero yo me refiero sólo al bucle del final, creo que no debe programarlo así.
el bucle del final es
int n = 1;
for (int i = 0; i < 4; n++) {
if (esPrimo(Math.pow(2, n) - 1)) {
System.out.println(Math.pow(2, n) - 1);
i++;
Da valor 1 a “n” y después, en el for, “i” va a tomar valores de cero hasta 3, lo que hará en principio que “n” tome valores 2,3,4,5; de momento falta el “n=7” del cuarto primo.
Pero ella incrementa “i” al final del bucle no sé por qué, ahí no lo entiendo, no sé si me pierdo algo. En cualquier caso, tenemos “i<4”, creo que al menos se puede decir que no dará más de cuatro vueltas, se parará en “i=3”. Y, si no, haga lo que haga, supongo que se para donde sea, ¿no?
Nadie sabe a priori el valor que puede tomar “n” en los primos de Mersenne, si se supiera, se podrían determinar los primos sin necesidad de ordenador; o usando el ordenador sólo como una calculadora para elevar 2 al “n” que fuera y después restarle 1.
Supongamos que le piden los diez primeros primos de Mersenne; el “n” del décimo primo es 89, no puede programar un bucle finito hasta “n=89” porque eso sólo lo sabe si busca el dato en internet; no creo que el ejercicio consista en eso, imagino que tiene que programar un bucle o un contador o lo que sea que pueda dar a "n" todos los valores que hagan falta y hacer que se pare cuando tenga diez primos; el programa es el que tiene que predecir el valor de los “enes”, no el programador, a eso me refiero (suponiendo que yo haya entendido lo que hace el programa en cuanto a los valores que toma "n", que puede ser que no lo interprete bien, claro).
Saludos.