Entwickler-Ecke
Algorithmen, Optimierung und Assembler - quadratischer Rest der Restklasse m mit Eclips
annemaria 1404 - Di 30.10.12 20:57
Titel: quadratischer Rest der Restklasse m mit Eclips
Hallo,
ich verzweifle gerade an einer Aufgabe...
Ich soll mit Eclips eine Funktion Programmieren, die testet, ob die Zahl a quadratischer Rest der Restklasse m ist.
Kann mir diesbezüglich jemand helfen?
platzwart - Di 30.10.12 22:02
Wo genau ist das Problem. Und was bedeutet "Rest der Restklasse m"?
annemaria 1404 - Mi 31.10.12 12:53
platzwart hat folgendes geschrieben : |
Wo genau ist das Problem. Und was bedeutet "Rest der Restklasse m"? |
Das genau Problem besteht darin das ich die Restklassen mit Zettel und Stift bestimmen kann aber die Umsetzung in ein Programm bekomme ich nicht hin. Zum Mathematischen Hintergrund habe ich mal das Skript angehangen in dem die Aufgabe drin steht und alles erklärt ist (Seite 18 - 23).
Wie schon geschrieben verstehe ich den Hintergrund und kann es auch berechnen aber leider nicht auf Eclips übertragen.
Gammatester - Mi 31.10.12 16:46
Ich weiß zwar nicht was
Eclips ist und was Du genau nicht übertragen, aber vielleicht helfen Dir die Pascal-Routinen aus meinem
MPArith 1.23.24 [
http://www.wolfgang-ehrhardt.de/misc_de.html#mparith] weiter (die neue Version von vorgestern hat leicht geänderte Unitstruktur: modulare Arithmetik, GGT/KGV, Jacobi/Kronecker sind jetzt in in der neuen mp_modul).
Es sind dort sowohl Integer- als auch Langzahl-Funktionon zur Berechnung des Jacobi-Symbols vorhanden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| function jacobi32(a,b: longint): integer;
function kronecker32(a,b: longint): integer;
function mp_jacobi(const a,n: mp_int): integer;
function mp_jacobi_lm(a: longint; const n: mp_int): longint;
function mp_jacobi_ml(const a: mp_int; n: longint): longint;
function mp_kronecker(const a,n: mp_int): integer; |
Auch viele Funktionen für modulare Qudratwurzeln (für Deine Seiten 21-23) sind in der Unit mp_numth implementiert.
Vielleicht hilfts weiter!
Gruß Gammatester
Mathematiker - Fr 02.11.12 18:54
Hallo,
Gammatesters Routinen sind für große Zahlen hervorragend geeignet, Dein Problem zu lösen.
Ich vermute, dass Du "Eclipse" für Java meinst.
Solltest Du nur kleine Zahlen bearbeiten wollen, dann genügt eine einfache Routine zur Berechnung des Legendre-Symbols (allgemein Jacobi-Symbol), z.B.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| function jac(x,y:integer):integer; var m8, temp, res: integer; begin if (y<3) or (not odd(y)) then begin jac:=0; exit end; res:=1; while true do begin x:=x mod y; if x=0 then begin jac:=0; exit end; while not odd(x) do begin x:=x div 2; m8:= y mod 8; if (m8 = 3) or (m8 = 5) then res := -res; end; if x = 1 then begin jac:=res; exit end; temp:= x; x := y; y := temp; if (x mod 4 = 3) and (y mod 4 = 3) then res:=-res; end; end; |
Nach Java musst Du es aber selbst übersetzen.
Sollst Du prüfen, ob a quadratischer Rest modulo p (p prim!) ist, dann ist jac(a,p) = 1.
Schwieriger wird es, wenn modulo n zu rechnen ist und n eine zusammengesetzte Zahl ist. Dann benötigst Du eine vollständige Primfaktorzerlegung von n. In der EE gibt es genügend Beispiele dazu.
Da aber in der Aufgabe
Zitat: |
Dabei kann auf eine Primzahlüberprüfung von m verzichtet werden. |
steht, genügt wohl die einfache Legendre-Symbol-Routine.
Unter
http://code.google.com/p/mapreduce-integer-factorization/source/browse/java/com/javiertordable/mrif/Legendre.java?r=7bdcbb5870a57bf4e7701dd973d5db4069a31c19 gibt's auch einen Java-Text für das Legendre-Symbol.
Beste Grüße
Mathematiker
annemaria 1404 - Mo 05.11.12 14:23
vielen Dank für eure Zahlreiche Hilfe
Das hat mir sehr geholfen!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!