2009-07-03 7 views
0

2つの数字の間にすべての素数を印刷したいとします。これは私のコードです: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); 
     } 
    } 
} 

それは1〜10の出力を実行していますです:

2 
3 
5 
7 
11 
13 
17 
19 
23 

なぜそれが7で停止しないのですか?

+0

ところで、それは_split_、_split_、_split_です。 – Jagger

答えて

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

0

ilowerASIntからupperAsIntまで数えます。 1から10までiを数えています。 i++の文は、iを1(1)で増分します。

だからあなたのループは読み:10未満である iながら、プライムを印刷し、ですから、最初の9つの結果が得られます。1.

iをインクリメントします。

1

あなたは首相の値が10

0

以上であるときは、1ずつ私をインクリメントしているので、私から実行するために起こっているのを停止するのではなく、ここで、(I < 10)を実行することが設定されています= 1までi = 10(9回)。あなたがそれを以前に止めたいならば、i =中間に設定します。

関連する問題