使用Java的BigInteger可能的素数

and*_*and 0 java primes biginteger

我想打印两个数字之间的所有素数.这是我的代码:

package sphere;

import java.math.BigInteger;
import java.io.*;

class PrimeTest2 {
    public static void main(String args[]) throws java.lang.Exception {
        BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
        String s = r.readLine();
        String [] splitted = s.split(" ");
        BigInteger lower = new BigInteger(splitted[0]);
        BigInteger upper = new BigInteger(splitted[1]);
        int lowerAsInt = Integer.parseInt(splitted[0]);
        int upperAsInt = Integer.parseInt(splitted[1]);
        BigInteger intermediate = lower;

        for (int i=lowerAsInt; i<upperAsInt; i++) {    
            intermediate = intermediate.nextProbablePrime();
            System.out.println(intermediate);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当它以1 10运行时,输出为:

2
3
5
7
11
13
17
19
23
Run Code Online (Sandbox Code Playgroud)

为什么不在7点停止?

cle*_*tus 5

因为你的程序说运行时间(1到9)不会停在10以下而不是你的循环,你可能想要:

BigIntegerupper = BigInteger.valueOf(upperAsInt);
while (intermediate.compareTo(upper) <= 0) {
  System.out.println(intermediate);
  intermediate = intermediate.nextProbablePrime();
}
Run Code Online (Sandbox Code Playgroud)

看到不同?您从1开始并在9(小于10)处停止,在每次迭代时打印一个数字.当数字大于上限时,上面停止.