Euklidischer Algorithmus

programmer13

Mitglied
Java:
public class ExtendedEuklid
{
public int g, u, v;
public ExtendedGcd(int a, int b)

{
ExtendetEuklid(a, b);
}

public void ExtendetEuklid(int a, int b)
{
int q, r, s, t;u=t=1;v=s=0;
while (b>0)
{
q=a/b;
r=a-q*b; a=b; b=r;
r=u-q*s; u=s; s=r;
r=v-q*t; v=t; t=r;
}
g=a;
}

Hallo zusammen,

hatte das Thema hier schon einmal reingestellt, konnte aber kurz danach nicht mehr auf mein Account zugreifen. Wie ihr schon seht, ist das der erweiterte euklidische Algorithmus.
Zu meiner Frage: Ich verstehe nicht, was das Extented bedeutet.
Der Quelltextist aus dem Netz. Könnt ihr mir ihn evtl. zeilenweise ausführlich erklären?
Ich bekomms nämlich alleine nicht hin.
Würdet ihr Sachen anders schreiben bzw. einfacher?
Wäre euch sehr dankbar:)
 
Zuletzt bearbeitet:

Neele

Mitglied
Hallo,

zunächst wäre es hilfreich, wenn du

  • jeden Befehl in eine Zeile schreiben würdest, also hinter jedes Semikolon ein Zeilenumbruch;
  • die Zeilen entsprechend einrücken würdest;
  • lauffähigen Code hochladen würdest (hier fehlt zum Beispiel eine Main-Methode, mit der man den Code testen kann);
  • den alten Thread verlinken würdest, für den Fall, dass es da noch Antworten gibt.
Das erhöht die Chancen auf eine Antwort erheblich.

Der Code sähe dann so aus:
Java:
public class ExtendedEuklid {
  public int g, u, v;

  public ExtendedGcd(int a, int b) {
    ExtendetEuklid(a, b);
  }

  public void ExtendetEuklid(int a, int b) {
    int q, r, s = 0, t = 1;
    int u = t;
    int v = s;
    while (b > 0) {
    q = a / b;
    r = a - q * b; 
    a = b;  
    b = r;
    r = u - q * s; 
    u = s;  
    s = r;
    r = v - q * t;  
    v = t; 
    t = r;
  }
  g = a;
}

Das "Extended" steht für "erweitert" und soll lediglich klar machen, dass es sich um den erweiterten euklidischen Algorithmus handelt. Es ist nur der Name der Methode und hat keine Auswirkungen darauf, was passiert.

Vielleicht solltest du dir auch das hier: http://www.java-forum.org/forum-faq-beitraege/7407-man-fragen-richtig-stellt.html mal durchlesen, um deine Chance auf hilfreiche Antworten zu erhöhen.

Liebe Grüße, Neele
 
Zuletzt bearbeitet:

Tobse

Top Contributor
Ich kann Neele nur zustimmen. Aber mal abgesehen davon, ist der Code auch mit main() Methode alles andere als Lauffähig; der Compiler wird jeden mit Fehlermeldungen bombardieren, der versucht, das ding zu kompilieren. Der Code ist Semanisch total sinnlos. Wo hast du diesen Schwachsinn her?
 

programmer13

Mitglied
Hallo,

Gebt bei Google "Erweiterter euklidischer Algorithmus Java Programm" ein, und der zweite Treffer zeigt den obigen Quelltext.
Ich weiß nicht, ob man einfach die Seite verlinken darf.

Der andere Thread handelte vom einfachen euklidischen Algorithmus, bringt uns also nicht wirklich weiter.
 
Zuletzt bearbeitet:

Neele

Mitglied
"Der zweite Eintag bei google" - das funktioniert leider häufig nicht, siehe hier: Raus aus der Filterblase Ihrer Suchmaschine!

Statt einfach blind etwas aus dem Internet zu kopieren, wie wäre es, wenn du den Code, so gut du kannst, selber schreibst, vllcht auf Basis dessen, was in dem anderen Thread herausgekommen ist, oder als Pseudocode? Davon ausgehend könntest du sehr viel konkretere Fragen stellen können als nur "was tut das?" und würdest ganz nebenbei noch etwas lernen. Denn wie der erweiterte euklidische Algorithmus funktioniert, hast du doch verstanden, oder?

LG, Neele
 
Zuletzt bearbeitet:

programmer13

Mitglied
Ich habe nochmals im Netz geforscht, und folgendes gefunden:
Java:
[B]public[/B] [B]class[/B] RSA_dSuche
{
  [B]public[/B] [B]int[/B] sucheD ([B]int[/B] p, [B]int[/B] q, [B]int[/B] e)
  [I]// Probierverfahren: v wird solange erhöht, bis d=(1 + v*phi)/e ganzzahlig ist[/I]
  {
    [B]int[/B] phi = (p-1)*(q-1);
    [B]int[/B] v = 0;
    [B]do[/B] {
      v++;
    } [B]while[/B] ((1 + v*phi) mod e != 0);
    [B]return[/B] ((1 + v*phi)/e);   [I]// = d[/I]
  }

  [B]public[/B] [B]int[/B] sucheD ([B]int[/B] p, [B]int[/B] q, [B]int[/B] e)
  [I]// nach dem Erweiterten Euklid-Algorithmus (iterativ)[/I]
  [I]// r, s, t  = aktuelle Werte, stützen sich auf/iterativ aus Vor- und Vorvorgänger![/I]
  [I]// r_1, s_1, t_1 = Vorgänger: eine Zeile höher/ein Durchlauf früher,[/I]
  [I]// r_2, s_2, t_2 = Vorvorgänger: zwei Zeilen höher/zwei Durchläufe früher,[/I]
  {
    [B]int[/B] phi = (p-1)*(q-1);
    [B]int[/B] r_2 = phi;     [B]int[/B] s_2 = 0;    [B]int[/B] t_2 = 1;   [I]// Startwerte[/I]
    [B]int[/B] r_1 = e;       [B]int[/B] s_1 = 1;    [B]int[/B] t_1 = 0;
    [B]int[/B] r, b, s, t;
    [B]do[/B]
    {
      r = r_2 mod r_1;                   [I]// aktuelle Werte aus Vorgängern berechnen[/I]
      b = r_2 / r_1;
      s = s_2 - s_1*b;
      t = t_2 - t_2*b;

      r_2 = r_1;    s_2 = s_1;    t_2 = t_1; [I]// neue Werte werden zu alten[/I]
      r_1 = r;     s_1 = s;     t_1 = t;
    } [B]while[/B] (r > 1);
    [B]int[/B] d = s;                         [I]// Bestimmung von d[/I]
    [B]while[/B] (d < 0)    [I]// falls s noch nicht positiv, d = s + u*phi, u so groß wie nötig[/I]
    {
      d = d + phi;
    }
    [B]return[/B] (d);
  }  
}

Könnt ihr mir es jetzt erklären?
Ja, ich weiß wie der euklidische Algorithmus funktioniert, aber bekomme es beim Besten Gewissen nicht hin.
Am Besten Zeile nach Zeile, damit ich es verstehe.
Ich habe bereits selbst probiert, es zu programmieren, komme aber nicht weit.

 
Zuletzt bearbeitet:

programmer13

Mitglied
Hallo,

Habe nun einen richtigen und lauffähigen Quelltext gefunden, den ich verwenden möchte.
Java:
[B]public[/B] [B]int[/B] sucheD ([B]int[/B] p, [B]int[/B] q, [B]int[/B] e)
  [I]// r, s, t  = aktuelle Werte, kommen aus Vor- und Vorvorgänger[/I]
  [I]// r_1, s_1, t_1 = Vorgänger: ein Durchlauf höher,[/I]
  [I]// r_2, s_2, t_2 = Vorvorgänger: zwei Durchläufe früher,[/I]
  {
    [B]int[/B] phi = (p-1)*(q-1);
    [B]int[/B] r_2 = phi;     [B]int[/B] s_2 = 0;   [B]int[/B] t_2 = 1;   [I]// Startwerte[/I]
    [B]int[/B] r_1 = e;       [B]int[/B] s_1 = 1;    [B]int[/B] t_1 = 0;
    [B]int[/B] r, b, s, t;
    [B]do[/B]
    {
      r = r_2 % r_1;                   [I]// aktuelle Werte aus Vorgängern berechnen[/I]
      b = r_2 / r_1;
      s = s_2 - s_1*b;
      t = t_2 - t_2*b;

      r_2 = r_1; s_2 = s_1; t_2 = t_1; [I]// neue Werte werden zu alten[/I]
      r_1 = r;   s_1 = s;   t_1 = t;
    }  
[B]                 while[/B] (r > 1);
    [B]int[/B] d = s;                         [I]// Bestimmung von d[/I]
    [B]while[/B] (d < 0)    [I]// falls s noch nicht positiv, d = s + u*phi, u so groß wie nötig[/I]
    {
      d = d + phi;
    }
    [B]return[/B] (d);
  }  
}

% ist sowas wie Modulo, also der Rest der Teilung.

Ich kann es mir leider nicht genau erklären.
Könnt ihr es mir erklären?
Wäre auch für jeden Tipp dankbar.

Was genau errechnet dieser Abschnitt?
Java:
 r = r_2 % r_1;                   [I]// aktuelle Werte aus Vorgängern berechnen[/I]
      b = r_2 / r_1;
      s = s_2 - s_1*b;
      t = t_2 - t_2*b;

      r_2 = r_1; s_2 = s_1; t_2 = t_1; [I]// neue Werte werden zu alten[/I]
      r_1 = r;   s_1 = s;   t_1 = t;
    }
r= phi mod e ??
b =phi / e ??
 

Denni173

Mitglied
Ich frage mich was Du eigentlich berechnen möchtest mit diesem Programm bzw. zu welchen Zweck?
Es erscheint mir seltsam das du dich mit den Euklidischen Algorthmen befasst, ohne solides Basiswissen in der Mathematik!

r= phi mod e (r = Pi modulo e ) heisst nichts anderes als das die Zahl Pi (3.1415... durch e dividiert wird und der Rest dieser Division dem Wert r übergeben wird!

Wenn es einen Sinn für Dich ergeben soll wirst du diesen Algorithmus selbst implementieren müssen.
Das geht bereits schon mit den Java-Basics. Dort wird auch der Modulo Operant erklärt.

So wird dir leider keiner helfen können oder wollen, Sorry !

Greetings D.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Greates Commong Dividend - euklidischer Algorithmus, modulos not positive Java Basics - Anfänger-Themen 5
J Euklidischer Algorithmus Java Basics - Anfänger-Themen 1
T Euklidischer Algorithmus Java Basics - Anfänger-Themen 3
B Euklidischer Algorithmus Java Basics - Anfänger-Themen 2
G Euklidischer Algorithmus Java Basics - Anfänger-Themen 1
laxla123 Eigenschaften eines Algorithmus (determiniert vs.. deterministisch) Java Basics - Anfänger-Themen 2
C Gewinnspiel erstellen mit Algorithmus Java Basics - Anfänger-Themen 3
C negamax-Algorithmus für Tic-Tac-Toe spielt manchmal falsch Java Basics - Anfänger-Themen 10
H Minimax Algorithmus in Tic Tac Toe Java Basics - Anfänger-Themen 3
M Minimax-Algorithmus für Vier gewinnt Java Basics - Anfänger-Themen 11
ohneInformatik; Trockentest Algorithmus, mathematischen Zusammenhang angeben Java Basics - Anfänger-Themen 3
M Minimax-Algorithmus Java Basics - Anfänger-Themen 17
mervanpolat Binary Search Algorithmus ausführen Java Basics - Anfänger-Themen 1
J Rekursiver Algorithmus Java Basics - Anfänger-Themen 9
M monte carlo Algorithmus für 4 gewinnt Java Basics - Anfänger-Themen 12
izoards Sortier Algorithmus für Bounding Box Elememte Links nach Rechts und von Oben nach Unten Java Basics - Anfänger-Themen 33
S Algorithmus entwicklen, der zu einem gegebenen Datum die Jahreszeit ermittelt Java Basics - Anfänger-Themen 13
rosima26 Merge-Algorithmus Java Basics - Anfänger-Themen 53
C Ein Algorithmus soll schneller werden Java Basics - Anfänger-Themen 24
D Dijkstra Algorithmus Hilfe!! Java Basics - Anfänger-Themen 9
U Den Kuchen aufteilen - aber wie? (Rebalancing-Algorithmus) Java Basics - Anfänger-Themen 14
s_1895 Pseudocode Naiver Algorithmus Java Basics - Anfänger-Themen 17
H String verschlüsseln - eigener Algorithmus Java Basics - Anfänger-Themen 104
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
Düsseldorf2002 Testen meines Algorithmus Java Basics - Anfänger-Themen 1
D Primzahlen Rechner nach Eratostenes von Kyrene Algorithmus Java Basics - Anfänger-Themen 2
KogoroMori21 Frage zum Euklidischen Algorithmus Java Basics - Anfänger-Themen 11
S Algorithmus java searchAll IKey Java Basics - Anfänger-Themen 4
S Algorithmus Datensätze einfügen wenn... Java Basics - Anfänger-Themen 26
KogoroMori21 MergeSort Algorithmus Java Basics - Anfänger-Themen 2
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
fendix Compiler-Fehler Algorithmus zur Bestimmung von Primzahlen Java Basics - Anfänger-Themen 7
S Algorithmus (reelle Zahl <65536 von dezimal zu dual) max. 10 Nachkommastellen Java Basics - Anfänger-Themen 4
G Algorithmus Graphen Java Basics - Anfänger-Themen 10
D Input/Output fehlerhafter Algorithmus zum Ersetzen von Array-Werten nach logischem Schema Java Basics - Anfänger-Themen 1
N Selection Algorithmus: Methode wird nicht erkannt (BlueJ) Java Basics - Anfänger-Themen 3
U Meinung zum Dijkstra Algorithmus Java Basics - Anfänger-Themen 6
U Dijkstra Algorithmus Laufzeit Java Basics - Anfänger-Themen 3
L Math.exp also eigenen Algorithmus Java Basics - Anfänger-Themen 2
Kirby.exe Algorithmus entwickeln Java Basics - Anfänger-Themen 37
M Algorithmus Max-Heap? Java Basics - Anfänger-Themen 3
I Labyrinth auf der Basis eines rekursiven Algorithmus Java Basics - Anfänger-Themen 27
CptK Best Practice Algorithmus nach jedem Schritt zum Visualisieren pausieren Java Basics - Anfänger-Themen 3
A Algorithmus effizienter machen Java Basics - Anfänger-Themen 1
V Algorithmus zur fortlaufenden Berechnung des duechscjnt Java Basics - Anfänger-Themen 1
M Dijkstra Algorithmus in Graphen auf mehrere verschiedene Knoten anwenden lassen Java Basics - Anfänger-Themen 11
O Labyrinth Algorithmus Java Basics - Anfänger-Themen 3
G Quicksort Algorithmus Java Basics - Anfänger-Themen 12
S Binäre-Suche Algorithmus Java Basics - Anfänger-Themen 1
D Algorithmus in Pseudocode mit log2(n) Operationen erstellen Java Basics - Anfänger-Themen 3
C Laufzeit eines Sortier-Algorithmus ermitteln Java Basics - Anfänger-Themen 4
H aufgabe java luhn algorithmus Java Basics - Anfänger-Themen 10
A Datenstruktur für Savings Algorithmus und Planung von kleinen Programmierprojekten Java Basics - Anfänger-Themen 1
J Algorithmus für eine Reihe implementieren Java Basics - Anfänger-Themen 2
S Dijkstra Algorithmus funktioniert nicht Java Basics - Anfänger-Themen 4
N Denksportaufgabe durch Algorithmus lösen Java Basics - Anfänger-Themen 2
S Problem mit einem rekursivem FloodFill Algorithmus Java Basics - Anfänger-Themen 62
B Algorithmus Square und Multiply Java Basics - Anfänger-Themen 3
J Algorithmus - Strings auf eigene Reihenfolge miteinander vergleichen Java Basics - Anfänger-Themen 4
D Frage Boyer-Moore Algorithmus Java Basics - Anfänger-Themen 7
M Komplexität Algorithmus Java Basics - Anfänger-Themen 8
H Zeichen im algorithmus Java Basics - Anfänger-Themen 4
B Code Verständnisfragen - FLoyd Warshall Algorithmus Java Basics - Anfänger-Themen 1
B Algorithmus zum entmischen einer Zahlenfolge Java Basics - Anfänger-Themen 15
X Minimax-Algorithmus über alle Kanten möglich? - Kanten darstellen Java Basics - Anfänger-Themen 1
T Algorithmus zur Überprüfung eines binären Suchbaums Java Basics - Anfänger-Themen 2
K Best Practice Algorithmus für Berechnung von Zahlenreihenfolge Java Basics - Anfänger-Themen 12
M Simpler Algorithmus läuft extrem langsam. Java Basics - Anfänger-Themen 3
K Erste Schritte Brute Force Algorithmus Java Basics - Anfänger-Themen 2
L Frage zu BubbleSort Algorithmus Java Basics - Anfänger-Themen 2
B gibt es ein Stundenplan-Algorithmus? Java Basics - Anfänger-Themen 11
O Algorithmus-Problem Java Basics - Anfänger-Themen 5
S Quicksort Algorithmus Java Basics - Anfänger-Themen 2
S GraphNode --- Dijkstra Algorithmus : NullPointerException Java Basics - Anfänger-Themen 1
B Rekursive Algorithmus schreiben Java Basics - Anfänger-Themen 8
V Algorithmus in einer Methode ausführen Java Basics - Anfänger-Themen 3
M Implementierung des Knuth-Morris-Pratt-Algorithmus Java Basics - Anfänger-Themen 0
M Dijkstras Algorithmus Java Basics - Anfänger-Themen 5
S Zusammenhang Datenstruktur/Algorithmus Java Basics - Anfänger-Themen 1
M Simulation - Algorithmus Java Basics - Anfänger-Themen 3
F Erste Schritte Hilfe beim Algorithmus finden Java Basics - Anfänger-Themen 8
D Algorithmus für Punkte auf einem Kreis Java Basics - Anfänger-Themen 0
D Algorithmus zu gegebener Laufzeit implementieren Java Basics - Anfänger-Themen 1
B Doppelte Werte aus Array entfernen ohne Import - Algorithmus Java Basics - Anfänger-Themen 5
C Ideen für einen Algorithmus Java Basics - Anfänger-Themen 1
F Best Practice Algorithmus optimieren - Binaeruhr Java Basics - Anfänger-Themen 2
S Euklid Algorithmus zur Berechnung des GGTs Java Basics - Anfänger-Themen 2
L Welcher Algorithmus ist das ? Java Basics - Anfänger-Themen 9
J Rekursiver Horner-Schema-Algorithmus - Verstehe ich ihn richtig? Java Basics - Anfänger-Themen 2
O Java Zufalls-Verteil-Algorithmus Java Basics - Anfänger-Themen 3
P ganz simpler algorithmus Java Basics - Anfänger-Themen 3
C Sortieren ohne Algorithmus Java Basics - Anfänger-Themen 8
J Algorithmus: Grad von floating zu Grad/Minute/Sekunde Java Basics - Anfänger-Themen 3
A Text Verschriebung/Algorithmus(?) Java Basics - Anfänger-Themen 8
R Rekursionsformel für Laufzeit von Algorithmus Java Basics - Anfänger-Themen 3
E Algorithmus für kart. Produkt: als int [] Feld repräsentiert Java Basics - Anfänger-Themen 10
U Peterson Algorithmus Java Basics - Anfänger-Themen 13
algebraiker Collections Bräuchte Hilfe bei dem Algorithmus - LinkedHashMap Java Basics - Anfänger-Themen 2
S A* Path Algorithmus in Java schon vorhanden Java Basics - Anfänger-Themen 3
S Bubble Sort Algorithmus Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben