⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 primes.java

📁 Servlet与JSP核心编程第二版代码
💻 JAVA
字号:
package coreservlets;import java.math.BigInteger;/** A few utilities to generate a large random BigInteger, *  and find the next prime number above a given BigInteger. *  <P> *  Taken from Core Servlets and JavaServer Pages 2nd Edition *  from Prentice Hall and Sun Microsystems Press, *  http://www.coreservlets.com/. *  &copy; 2003 Marty Hall; may be freely used or adapted. */public class Primes {  // Note that BigInteger.ZERO and BigInteger.ONE are  // unavailable in JDK 1.1.  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()));  }  /** Simple command-line program to test. Enter number   *  of digits, and the program picks a random number of that   *  length and then prints the first 50 prime numbers   *  above that.   */    public static void main(String[] args) {    int numDigits;    try {      numDigits = Integer.parseInt(args[0]);    } catch (Exception e) { // No args or illegal arg.      numDigits = 150;    }    BigInteger start = random(numDigits);    for(int i=0; i<50; i++) {      start = nextPrime(start);      System.out.println("Prime " + i + " = " + start);    }  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -