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); } } }

Rispondi quotando