Modulo und BigInteger

  • Themenstarter Themenstarter GreenThunder
  • Beginndatum Beginndatum
G

GreenThunder

Hallo,

ich soll in einer Aufgabe den größten gemeinsamen Teiler mittels des euklidischen Algorithmus für BigInteger-Zahlen berechnen. Doch irgendwie funktioniert es nicht, wenn a < b.
Ich komme nicht drauf warum das so ist. Es liegt wohl irgendwie an der Modulo-Anweisung, oder?

Danke für Hinweise.

Meine Methode
PHP:
public static BigInteger ggT(BigInteger a, BigInteger b)                               
   {
   BigInteger x = new BigInteger("0");	
   BigInteger c = new BigInteger("0");
   BigInteger mod=(a.mod(b));
   
   while((mod.compareTo(x))!= 0)
   {
   c = new BigInteger(b.toString());
   b = new BigInteger(mod.toString());
   a = new BigInteger(c.toString());
   }
   return b;
   }
 
Hallo!

Schau mal hier:
Code:
   /**
    * 
    */
   package de.tutorials;
   
   import java.math.BigInteger;
   
   /**
    * @author Tom
    * 
    */
   public class GCDForBigNumbersExample {
   
   	/**
   	 * @param args
   	 */
   	public static void main(String[] args) {
   		BigInteger a = BigInteger.valueOf(144);
   		BigInteger b = BigInteger.valueOf(96);
   
   		System.out.println(gcd(b, a));
   		System.out.println(gcd(a, b));
   
   		System.out.println(gcd2(b, a));
   		System.out.println(gcd2(a, b));
  
   		  //Btw:
   		  System.out.println(a.gcd(b));
   
   	}
   
   	public static BigInteger gcd(BigInteger a, BigInteger b) {
   		if (!BigInteger.ZERO.equals(b)) {
   			return gcd(b, a.mod(b));
   		} else {
   			return a;
   		}
   	}
   
   	public static BigInteger gcd2(BigInteger a, BigInteger b) {
   		BigInteger remainder = null;
   		do {
   			remainder = a.mod(b);
   			a = b;
   			b = remainder;
   		} while (!BigInteger.ZERO.equals(remainder));
   		return a;
   	}
   
   }

Gruß Tom
 
Danke, aber warum geht es bei mir nicht?

[edit]

Hab den Fehler gefunden, es muss so aussehen:

PHP:
   public static BigInteger ggT(BigInteger a, BigInteger b)                               
   {
   BigInteger c = new BigInteger("0");
   do
   {
   c = a.mod(b);
   a = new BigInteger(b.toString());
   b = new BigInteger(c.toString());
   }
   while((!BigInteger.ZERO.equals(c)));
   return a;
   }

Nochmal, danke!
 
Zuletzt bearbeitet von einem Moderator:
Zurück