BigInt ung ggT

Status
Nicht offen für weitere Antworten.

Java_Cup

Mitglied
Kann mir jemand sagen wo hier der Fehler ist? ???:L
Es müsste eigentlich so stimmen...
Code:
public class bGGT{



	public static BigInteger ggT(BigInteger x, BigInteger y) {



		do {
			BigInteger rest = x.mod(y); //hier zeigt er ein Fehler an 
			x = y;
			y = rest;
		} while (y != BigInteger.ZERO);
		return x;
	}

	public static void main(String[] args) {
		
	        BigInteger a = new BigInteger("4536847736874386743687");

		BigInteger b = new BigInteger("654354363684364834368436843684736847");

		ggT(a, b);

	}

}
 
diese

Code:
Exception in thread "main" java.lang.ArithmeticException: BigInteger: modulus not positive
	at java.math.BigInteger.mod(BigInteger.java:1494)
	at bGGT.ggT(BigGGT.java:16)
	at bGGT.main(BigGGT.java:31)
 
Hey, es funzt!!! 🙂
lag daran,dass BigInteger kein primitiver Datentyp ist, sondernein "Objekt"...

Code:
while (!(y.equals(BigInteger.ZERO) ));

danke schööööön
 
ich hätte jetzt auch gesagt der Euklid geht bis >= und nicht bis != - die Fehlermeldung mag ich jetzt aber auch nicht komplett zu deuten 😉
 
der Fehler war, dass es keine Garantie dafür gibt, dass eine Berechnung wirklich das Objekt BigInteger.NULL zurückgibt wenn 0 rauskommt...
 
gcd
public BigInteger gcd(BigInteger val)
Returns a BigInteger whose value is the greatest common divisor of abs(this) and abs(val). Returns 0 if this==0 && val==0.

Parameters:
val - value with which the GCD is to be computed.
Returns:
GCD(abs(this), abs(val))
 
0xdeadbeef hat gesagt.:
gcd
public BigInteger gcd(BigInteger val)
Returns a BigInteger whose value is the greatest common divisor of abs(this) and abs(val). Returns 0 if this==0 && val==0.

Parameters:
val - value with which the GCD is to be computed.
Returns:
GCD(abs(this), abs(val))

lol 😀
 
Das is so ne Methode gibt, is eh klar 😉

Aber ich schätz mal auf Hausaufgabe oder ähnliches 🙂

Ansonsten, Pech 🙂
 
Krass ist auch der Quelltext der Methode bzw. die von hybridGCD 😉 ... verstehen tu ich das nicht gänzlich 😉
 
Also für den Fall, daß das keine Hausaufgabe ist, würde ich auf jeden Fall die mit BigInteger mitgelieferte Methode benutzen. Die ist deutlich performanter implementiert (Algorithmus nach Euklid bis Zahlen ungefährt gleich lang sind, dann binärer Algorithmus).
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben