2009-07-03 31 views
0

我想打印兩個數字之間的所有素數。這是我的代碼:使用Java的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); 
     } 
    } 
} 

當它與110的輸出運行是:

2 
3 
5 
7 
11 
13 
17 
19 
23 

爲什麼它不停止在7?

+0

順便說一句,它是_split_,_split_,_split_。 – Jagger 2012-11-15 11:10:02

回答

5

因爲你的程序說運行時間(1〜9)不停止低於10而不是你的循環中,你可能想:

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

看到區別?你從1開始,並在9(小於10)停止,每次迭代打印一個數字。當數字大於上限時,上述停止。

+0

這實際上打印到11,但是這是正確的推理。 – andandandand 2009-07-04 00:58:51

0

您正在計算ilowerASIntupperAsInt。你正在計數從1到10. 聲明i++增加i與1(一)。

所以,你的循環讀取: 而i小於10,打印一個素數,增加i與1

所以,你會得到第9個結果。

1

你必須將其設置爲運行,其中(i < 10),而不是停止時,黃金的價值是大於10

0

你被一個每次遞增我,所以它會從我運行= 1,直到i = 10(9次)。如果你想讓它停止前面的設置i = intermediate。