Datentypen Erweiterter Euklidscher Algo

Dondono

Mitglied
Java:
public class ExtendedEuclid {

   
   static int[] gcd(int p, int q) {
      if (q == 0)
         return new int[] { p, 1, 0 };

      int[] vals = gcd(q, p % q);
      int d = vals[0];
      int a = vals[2];
      int b = vals[1] - (p / q) * vals[2];
      return new int[] { d, a, b };
   }

   public static void main(String[] args) {
      int p = Integer.parseInt(args[0]);
      int q = Integer.parseInt(args[1]);
      int vals[] = gcd(p, q);
      System.out.println("gcd(" + p + ", " + q + ") = " + vals[0]);
      System.out.println(vals[1] + "(" + p + ") + " + vals[2] + "(" + q + ") = " + vals[0]);
   }
}

Dieser Code berechnet den ggT von(p,q), sowie s und t.
Also: p*s+t*q=ggT(p,q)

Jedoch kann es z.B. "5682864303300955799" (,also sagen wir mal als p) und eine zweite gleich große Zahl nicht verarbeiten.
Ich habe es natürlich auch schon mit "double" versucht.
Aber es wird ausgegeben, dass die Eingabezahl zu groß sei.
Was mache falsch, kann mich jemand korrigieren?
 
Zuletzt bearbeitet:

nomuri

Aktives Mitglied
Also bei mir ergibt dein Code ne ArrayIndexOutOfBoundsException . Du musst also dein Array mal überprüfen, irgendwo hüppelt der raus.

Generell finde ich deinen code auch etwas strange und unübersichtlich. Du solltest dir ein strukturierteres Arbeiten angewöhnen.

Womit fütterst du denn args[0] und args[1]?
 
Zuletzt bearbeitet:

Dondono

Mitglied
Es ist nicht mein Quellcode.

Mit BlueJ funktioniert es, aber mit eclipse zB nicht, ich weiß.

Ich glaube diese ArrayEinträge sind s und t, bin mir aber nicht sicher.
 

Dondono

Mitglied
So habe auch mit long versucht. Die Eingabezahlen können größer sein. Doch immer noch nicht so groß wie ich will.
Hätte da jemand bitte einen Rat für mich?
Habe es auch mit double versucht, aber die Ergebnisse werden ziemlich ungenau, außerdem kann es auch nicht mit so großen Zahlen die ich haben will arbeiten.
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben