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

	}

}
 

Java_Cup

Mitglied
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)
 

Java_Cup

Mitglied
Hey, es funzt!!! :)
lag daran,dass BigInteger kein primitiver Datentyp ist, sondernein "Objekt"...

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

danke schööööön
 

SnooP

Top Contributor
ich hätte jetzt auch gesagt der Euklid geht bis >= und nicht bis != - die Fehlermeldung mag ich jetzt aber auch nicht komplett zu deuten ;)
 

Bleiglanz

Gesperrter Benutzer
der Fehler war, dass es keine Garantie dafür gibt, dass eine Berechnung wirklich das Objekt BigInteger.NULL zurückgibt wenn 0 rauskommt...
 

0xdeadbeef

Top Contributor
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))
 

bummerland

Top Contributor
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 :D
 

thE_29

Top Contributor
Das is so ne Methode gibt, is eh klar ;)

Aber ich schätz mal auf Hausaufgabe oder ähnliches :)

Ansonsten, Pech :)
 

SnooP

Top Contributor
Krass ist auch der Quelltext der Methode bzw. die von hybridGCD ;) ... verstehen tu ich das nicht gänzlich ;)
 

0xdeadbeef

Top Contributor
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.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben