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

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

当它与1 10运行输出是:

2
3
5
7
11
13
17
19
23

为什么它不在停止在7?

有帮助吗?

解决方案

由于你的程序说运行时间(1〜9)不停止低于10而不是你的循环中,你可能想:

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

请参阅不同?此致从1开始,在图9(小于10)停止时,印刷在每个迭代一个数字。上述停止时的数目大于上限越大。

其他提示

您有它设置来运行,其中(i <10),而不是停止时素的值是大于10

您由一个每次增加i,所以这将运行从i = 1至I = 10(9次)。如果希望停止较早集合I =中间

您从i计数lowerASIntupperAsInt。您是从计数1〜10个。 声明i++增量i 1(一个)。

所以,你的循环读取: 而i小于10,打印一个素数,增量i用1

所以,你会得到第9个结果。

这工作,如果你使用JDK8

 BigInteger lower=BigInteger.valueOf(1);
        BigInteger high=BigInteger.valueOf(100);
        Stream.iterate(lower, BigInteger::nextProbablePrime).limit(high.longValueExact())
                .filter(p -> p.compareTo(high) <= 0).forEach(System.out::println);

请不要用于上述流使用并行(),因为它会降低性能。作为一个经验法则,请不要并行流,如果你在你的代码有Stream.iterate()或Stream.limit()。在我的VM A简单的基准示出了并行版本比迭代一个较慢的4次

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top