import java.util.*;
import java.io.*;
import java.math.*;
/**
* Calculo de la secuencia de Mersenne [(2^n)-1] y comprobación de si el número
* es primo o no.
* Salida por pantalla y guardada en .txt indicando si el numero obtenido es primo y la secuencia de Mersenne
*/
public class Mersenne
{
public static void primosMersenne(double n)
{
File f
= new File("/Users/Miki/Desktop/Datos.txt"); try
{
pw.println("Calculo de la secuencia de Mersenne y de sus números primos");
pw.println("-----------------------------------------------------------");
for(int i = 2; i <= n; i++)
{
double op
= (Math.
pow(2,i
)-1); pw.println(res);
boolean primo = true;
if(op == 2)
{
primo = true;
}
else
{
if(op%2 == 0)
{
primo = false;
}
else
{
int x = 3;
int raiz
=(int)Math.
sqrt(op
); while(x <= raiz && op%x != 0)
{
x += 2;
}
if(x > raiz)
{
primo = true;
}
else
{
primo = false;
}
}
}
if(primo == true)
{
System.
out.
println(i
+"==> El número "+res
+" es primo de la secuencia de Mersenne "+tiempo.
get(Calendar.
HOUR)+":"+tiempo.
get(Calendar.
MINUTE)+":"+tiempo.
get(Calendar.
SECOND)+":"+tiempo.
get(Calendar.
MILLISECOND)); pw.
println(i
+"==> El número "+res
+" es primo de la secuencia de Mersenne "+tiempo.
get(Calendar.
HOUR)+":"+tiempo.
get(Calendar.
MINUTE)+":"+tiempo.
get(Calendar.
SECOND)+":"+tiempo.
get(Calendar.
MILLISECOND)); }
}
pw.close();
}
{
System.
err.
println("Problemas al abrir el fichero. "+e
); }
}
}
Como veras cuando calculo si el numero es primo o no utilizo condicionales "if(op == 2)", y si utilizo op en vez de opp(BigDecimal) el numero no es realmente el número que toca y el programa falla.
Es decir el numero 2^61 en double seria: 2.305843009213694E18 lo que realmente es 2305843009213693951 el cual es un número primo pero si entra como double no interpreta el número que realmente es y no lo toma como primo.
Por eso cuando se hace "if(op == 2)" necesito que op sea 2305843009213693951 y no 2.305843009213694E18.
Un poco lio no jajajjaa, esto no corre prisa ni es para nada es todo autodidacta y para aprender, si puedes o crees que se puede mejorar el código me encantaria discutirlo.
Gracias