2009-07-03 3 views
0

Je souhaite imprimer tous les nombres premiers entre deux nombres. Ceci est mon code:Utilisation des nombres premiers probables BigInteger de Java

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

Quand il est exécuté avec 1 10 la sortie est:

2 
3 
5 
7 
11 
13 
17 
19 
23 

Pourquoi ne pas arrêter à 7?

+0

Par ailleurs, il s'agit de _split_, _split_, _split_. – Jagger

Répondre

5

Parce que votre programme dit courir les temps (1 à 9) pas arrêter ci-dessous 10. Au lieu de votre boucle, vous voudrez probablement:

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

Voir la différence? Le vôtre commence à 1 et s'arrête à 9 (moins de 10), en imprimant un nombre à chaque itération. Ce qui précède s'arrête lorsque le nombre est supérieur à la limite supérieure.

+0

Cela imprime réellement jusqu'à 11, mais oui c'est le bon raisonnement. – andandandand

0

Vous comptez i de lowerASInt à upperAsInt. Vous comptez i de 1 à 10. L'instruction i++ incrémente i avec 1 (un).

Ainsi, votre boucle lit: en i est inférieur à 10, imprimer un nombre premier et incrémenter i avec 1.

Vous obtiendrez les 9 premiers résultats.

1

Vous l'avez configuré pour fonctionner où (i < 10), de ne pas arrêter lorsque la valeur d'une prime est supérieure à 10

0

Vous êtes i incrémente de un à chaque fois, il va courir à partir de i = 1 jusqu'à i = 10 (9 fois). si vous voulez qu'il s'arrête plus tôt, définissez i = intermédiaire.

Questions connexes