Faktorenzerlegung großßer Zahlen
3.) Faktorenzerlegung à la Monte Carlo :
Bei der Methode von J. M. Pollard ist es nicht immer möglich bei einer teilbaren Zahl einen Faktor zu finden. Die Suche wird zu einem Glücksspiel. Man untersucht ob es von einer natürlichen Zahl N und einer errechneten Zahl P einen größten gemeinsamen Teiler gibt. P bekommt man, indem zwei neue Variablen (x, y ) einführt, für welche gilt : f(x)=x²+c (c=0;2 ) x x²+c ; y (y²+c)²+c """" P²=P1·( y - x )
Als Startwert für x, y, und P wird 1 verwendet.
1.Schritt:
Setze x=1 ;y=1 ;P=1
2.Schritt:
Setze x = x²+c ; y = (y²+c)²+c und P²=P1·( y - x )
3.Schritt:
Berechne den ggT von P und N. Fals das Ergebnis = 1 ist, Wiederhole den Vorgang ab dem Schritt 2 .
Bei allen anderen Ergebnissen hat man mit dem ggT den gesuchten Teiler gefunden .
!Achtung!:
-
Bei Schritt 2 entstehen für die Variablen x, y und P große Werte. Man muss daher die Ergebnisse
-
Fals N selbst der Teiler ist, gibt es zwei Möglichkeiten:
-
N ist eine Primzahl Man kann die Konstante c verändern (z.B.:von 1 auf 2,3,...)
-
Wenn einem die Berechnung des Schrittes 3 zu Zeitaufwendig ist, kann man dies umgehen, indem
seltener Verlust des Teilers ) .
Hier ein Programmierbeispiel in Q - Basic :
-
CLS:CLEAR: X=1: Y=1: P=1: T=1 ‘ **** Programm zur Faktorenzerlegung von MEISEL Marcus **** INPUT "zu teilende Zahl (N): ";N : MO=N: INPUT "Konstante C: "; C: CLS X=X²+C: GOSUB 9: Y=(Y²+C)²+C: GOSUB 10: P=P*(Y - X):GOSUB 11: V=V+1: IF V>=25 THEN V=25 LOCATE 10,0:PRINT "X Y P":LOCATE 10,V:PRINT X;:LOCATE 23,V:PRINT Y;: LOCATE 36,V:PRINT P; IF P=0 THEN GOTO 19 IF P=1 THEN GOTO 3 INPUT "";I:GOTO 12 GOTO 3 X=X - (INT(X/MO))*MO:RETURN Y=Y - (INT(Y/MO))*MO:RETURN IF ABS ( P ) <> P THEN P= N - ABS ( P ) : P=P - ( INT ( P / MO ) ) * MO : RETURN ‘ *****ggT - - ausrechnen TE = P RE = N - ( INT ( N / TE ) ) * TE: IF RE=1 THEN T=1: GOTO 3 IF RE=0 THEN T=TE: GOTO 17 N=TE:TE=RE:GOTO 14 ‘ *****die Lösung CLS:LOCATE 1,1:PRINT "Zahl ";MO;" u. ";P;" sind durch ";T;" Teilbar.";:BEEP:INPUT"" ;I:GOTO1 ‘ *****eine Primzahl CLS:LOCATE 1,1:PRINT "Zahl ";MO;"ist eine Primzahl! - oder ein anderes !!c!! prob.";:BEEP:INPUT"" ;I GOTO1 ‘ ***** ENDE dieses ©Programs
N=143 => X Y P
c=1 1 1 1
2 5 3
5 105 14
26 83 83
105 105 0=> Primzahl oder c anders wählen z.B.: c=2
N=143
c=2
=> X Y P
3 11 8
11 116 125
123 115 142
116 38 65 ggT(65,143)=13 =>13/143
Antwort : 143 ist durch 13 teilbar.
4.) Weitere Algorithmen :
-
Ein weiterer Algorithmus von J. M. Pollard:
gilt : p - 1 ist nur durch kleine Primfaktoren teilbar. Auf diesen
Rechengang wird in dem Artikel von Williams näher eingegangen.
-
Der SQUFOF - Algorithmus von D. Shanks:
Zahlkörpern.Näheres : siehe Artikel von Williams.
560 Worte in "deutsch" als "hilfreich" bewertet