Ciao, non riesco a capire cosa fa esattamente il metodo istanza
isProbablePrime(ERR_VAL); della classe BigInteger, restituisce un valore booleano
ma non ne capisco la finalita', di seguito vi mostro iil piccolo programma
che lo utilizza:
codice:
public class Primes {
private static final BigInteger ZERO = BigInteger.ZERO;
private static final BigInteger ONE = BigInteger.ONE;
private static final BigInteger TWO = new BigInteger("2");
// Likelihood of false prime is less than 1/2^ERR_VAL.
// Presumably BigInteger uses the Miller-Rabin test or
// equivalent, and thus is NOT fooled by Carmichael numbers.
// See section 33.8 of Cormen et al.'s Introduction to
// Algorithms for details.
private static final int ERR_VAL = 100;
public static BigInteger nextPrime(BigInteger start) {
if (isEven(start))
start = start.add(ONE);
else
start = start.add(TWO);
if (start.isProbablePrime(ERR_VAL))
return(start);
else
return(nextPrime(start));
}
private static boolean isEven(BigInteger n) {
return(n.mod(TWO).equals(ZERO));
}
private static StringBuffer[] digits =
{ new StringBuffer("0"), new StringBuffer("1"),
new StringBuffer("2"), new StringBuffer("3"),
new StringBuffer("4"), new StringBuffer("5"),
new StringBuffer("6"), new StringBuffer("7"),
new StringBuffer("8"), new StringBuffer("9") };
private static StringBuffer randomDigit(boolean isZeroOK) {
int index;
if (isZeroOK) {
index = (int)Math.floor(Math.random() * 10);
} else {
index = 1 + (int)Math.floor(Math.random() * 9);
}
return(digits[index]);
}
/** Create a random big integer where every digit is
* selected randomly (except that the first digit
* cannot be a zero).
*/
public static BigInteger random(int numDigits) {
StringBuffer s = new StringBuffer("");
for(int i=0; i<numDigits; i++) {
if (i == 0) {
// First digit must be non-zero.
s.append(randomDigit(false));
} else {
s.append(randomDigit(true));
}
}
return(new BigInteger(s.toString()));
}
public static void main(String[] args) {
int numDigits;
try {
numDigits = Integer.parseInt(args[0]);
} catch (Exception e) { // No args or illegal arg.
numDigits = 2;
}
BigInteger start = random(numDigits);
for(int i=0; i<50; i++) {
start = nextPrime(start);
System.out.println("Prime " + i + " = " + start);
}
}
}