Sto usando la libreria "EDU.ksu.cis" (non so in che altro modo definirla , è reperibile qui ) , in particolare la sua classe LargeInteger per alcune operazioni su numeri MOLTO grandi.
Probabilmente vi chiederete perchè non usi le librerie standard (BigInteger) e la risposta è che la classe BigInteger è lentissima a confronto..basti pensare che per la sola determinazione del numero 2^57885161 - 1 i tempi di calcolo sono rispettivamente di 1395 s (BigInteger) vs 70 s (LargeInteger) ..ovviamente parlo del test effettuato sul mio pc (i7 2.4/3.4 GHz).
Sfortunatamente la libreria che sto usando non ha un metodo per determinare se un numero è primo o no , ho deciso così di implementarlo da me..il metodo da me scritto è il seguente:

codice:
public static boolean isProbablePrime (LargeInteger li) {
	if (li.compareTo (uno) < 1)
		return false;
	if (li.compareTo (due) == 0)
		return true;
	if (li.divide (due) [1].compareTo (zero) == 0)
		return false;
	LargeInteger temp = new LargeInteger ("3");
	LargeInteger half = li.divide (2) [0];
	while (temp.compareTo (half) <= 0) {
		if (li.divide (temp) [1].compareTo (zero) == 0)
			return false;
		temp = temp.add (due);
	}

	return true;
}
Ho testato il metodo sopra scritto così facendo:
codice:
LargeInteger temp = new LargeInteger ("2");
while (true) {
	if (isProbablePrime (temp))
		System.out.println (temp);
	temp = temp.add (uno);
}
E guardando i numeri primi stampati ho notato una stranezza..fino a 97 vengono stampati i numeri primi correttamente , dopo 97 mi stampa 201 (che non è un numero primo e inoltre salta tutti i numeri primi tra 97 e 201)..perchè avviene ciò?Come posso rimediare?