Hallo,
ich habe ein Programm zur Primzahlberechnung nach Fermat geschrieben.
Dabei habe ich zwei Probleme die ich nicht in den Griff bekomme:
import java.math.BigInteger;
import java.util.Random;
1. Wenn ich bei der Methode isPrime in die Klammern einen Wert BigInteger übergeben will und dann die klasse compilieren und die Methode aufrufe dann kommt die Fehlermeldung:
2. Wenn ich den BigInteger folgendermaßen übergebe, dann geht das 1. Problem. (Das will ich aber nicht.) Nun ist aber das Problem wenn ich z.B. die Zahl 7 nehme, was ja eindeutig eine Primzahl ist, dann kommt trotzdem immer false raus.
Ich habe auch schon analysiert das das Problem in der markierten Schleife liegt und dort reingegangen wird obwohl der ggT = 1 ist.
Kann mir bitte wer bei meinen Problemen helfen?
ich habe ein Programm zur Primzahlberechnung nach Fermat geschrieben.
Dabei habe ich zwei Probleme die ich nicht in den Griff bekomme:
import java.math.BigInteger;
import java.util.Random;
Java:
public class FermatTest
{
static Random random = new Random();
static BigInteger Big0 = BigInteger.ZERO;
static BigInteger Big1 = BigInteger.valueOf(1);
static BigInteger Big2 = BigInteger.valueOf(2);
public FermatTest()
{
}
private static BigInteger zufall(BigInteger c) {
BigInteger R;
do {R = new BigInteger(c.bitLength(),random).add(Big2);}
while (R.compareTo(c)>0);
return R;
}
public static boolean isPrime([COLOR="Magenta"]BigInteger n[/COLOR]) {
BigInteger n_1 = n.subtract(Big1);
if (n.compareTo(new BigInteger("3")) < 0) {
System.out.println("Geben Sie eine Zahl größer oder gleich 3 ein!");
}
if ((n.mod(Big2)) == Big0) {
System.out.println("Geben Sie eine ungerade Zahl ein!");
return false;
}
BigInteger basis = zufall(n);
if (basis.gcd(n) == Big1) {
System.out.println("Fehler1");
return false;
}
else {
BigInteger x = basis.modPow(n_1, n);
if (x != Big1) {
System.out.println("Fehler2");
return false;
}
else return true;
}
}
}
1. Wenn ich bei der Methode isPrime in die Klammern einen Wert BigInteger übergeben will und dann die klasse compilieren und die Methode aufrufe dann kommt die Fehlermeldung:
HTML:
Error - incompatible Types - found int but expected java.math.BigInteger
2. Wenn ich den BigInteger folgendermaßen übergebe, dann geht das 1. Problem. (Das will ich aber nicht.) Nun ist aber das Problem wenn ich z.B. die Zahl 7 nehme, was ja eindeutig eine Primzahl ist, dann kommt trotzdem immer false raus.
Ich habe auch schon analysiert das das Problem in der markierten Schleife liegt und dort reingegangen wird obwohl der ggT = 1 ist.
Java:
public static boolean isPrime() {
[COLOR="SeaGreen"] BigInteger n = new BigInteger("7");[/COLOR]
BigInteger n_1 = n.subtract(Big1);
if (n.compareTo(new BigInteger("3")) < 0) {
System.out.println("Geben Sie eine Zahl größer oder gleich 3 ein!");
}
if ((n.mod(Big2)) == Big0) {
System.out.println("Geben Sie eine ungerade Zahl ein!");
return false;
}
BigInteger basis = zufall(n);
[COLOR="SeaGreen"]if (basis.gcd(n) == Big1) {
System.out.println("Fehler1");
return false;[/COLOR]
}
else {
BigInteger x = basis.modPow(n_1, n);
if (x != Big1) {
System.out.println("Fehler2");
return false;
}
else return true;
}
}
}
Kann mir bitte wer bei meinen Problemen helfen?
Zuletzt bearbeitet: