J'essaie de comparer si la valeur d'un BigInteger (base) est> la valeur d'un autre BigInteger (prime) et si la valeur de 'a' n'est pas égale à un. Si la valeur de a n'est pas 1, il devrait sortir de la boucle. Comment dois-je les comparer?
Random ran = new Random();
BigInteger prime = new BigInteger(16,ran);
BigInteger base,a,one;
one = new BigInteger("1");
for (int i = 0; i < 65535; i++){
while (base>prime){
base = new BigInteger(16,ran);
}
a = base.modPow(prime.subtract(one),prime);
System.out.println("a: "+a);
if (a != one){
break;
}
}
Vous pouvez les comparer avec BigInteger.compareTo(BigInteger)
.
Dans votre cas, ce serait while (base.compareTo(prime) > 0) {...}
.
De plus, votre condition de terminaison doit passer de if (a != one)
à if (!a.equals(one))
puisque deux variables BigInteger
avec le même entier ne font pas nécessairement référence au même objet (ce qui correspond à tout ce que ==
et !=
testent).
Puisque BigInteger
s sont des objets, vous devez faire preuve de prudence lorsque vous utilisez les opérateurs d'égalité. À l'heure actuelle, vous effectuez une comparaison de références (qui, dans ce cas, échouera probablement). Vous devrez utiliser les méthodes equals()
ou compareTo()
.
BigInteger a une variable statique intégrée qui en représente une. Utilisez la méthode equals()
ou la méthode compareTo()
pour comparer les valeurs:
if (!a.equals(BigInteger.ONE)) {
...
}
-ou-
if (a.compareTo(BigInteger.ONE) != 0) {
...
}
J'espère que cela pourra aider! Voir ici pour plus d'informations: http://download.Oracle.com/javase/6/docs/api/Java/math/BigInteger.html
Peut être
while (base.compareTo(prime)>0){
//rest of your loop
}