Die Perrin-Folge, oder
Pseudoprimzahlen nach "Perrin", dazu
"Aribas", ein Spitzenprogramm

Home

Wenn etwas Freude bereitet, wenn eine Sache Spaß macht, dann sollte man andere Menschen daran teilhaben lassen. Wenn Sie, verehrter Leser, darüber hinaus ein wenig programmieren, dann sind Sie eingeladen.

Die Perrin-Folge,   vor 100 Jahren erkannt,    selten genannt,    sehr interessant!

Mich beeindruckt bei der Perrinfolge und Methode der überzeugend einfache Zusammenhang der (Pseudo-) Primzahlen mit der natürlichen Zahlenfolge. Merkwürdig ist, daß man von dieser Abhängigkeit kaum etwas hört. Dem möchte ich abhelfen und auf drei Fundstellen im Netz aufmerksam machen. - Nebenbei: Pseudoprimzahlen sind die falschen Fufziger, also Zahlen, die nach einem bestimmten Testverfahren prim erscheinen und doch teilbar sind!

Link 1:   Dr. Schmidbauer,  "Perrin pseudoprimes"  http://www.ai.univie.ac.at/perrin.html
Hier erhält man einen ersten Überblick, Tabellen, auch eine Berechnungsmöglichkeit ist gegeben.

Link 2:   Dr. Stephan, "Zahlenfolgen"                        http://www.wias-berlin.de/people/stephan
(Gehen Sie bitte dort zu "personal homepage" und dann zu "Einiges über Zahlenfolgen")
Auf den Seiten 47 bis 49 des Downloads geht es speziell um die Perrin-Folge. Ein Weg zur eigenen Programmierung wird angegeben. Der erweiterte Titel: "Zahlenfolgen bieten den Einstieg in die verschiedensten mathematischen Teildisziplinen." Diese private Homepage könnte auch für Sie zu der Quelle werden. Anschauen!

Link 3:   Dr. Forster, Programm "Aribas"                 http://www.mathematik.uni-muenchen.de/~forster
Der Autor bietet mit Aribas einen Interpreter der Sonderklasse an, noch dazu kostenlos! Das Programm verarbeitet Zahlen mit jeder gewünschten Stellenzahl vor oder nach dem Komma. Jede Rechenoperation, alle allgemeinen Funktionen und viele ganz spezielle Funktionen werden angeboten. Eine herrliche Sammlung von Algorithmen zu Sätzen und Methoden der Zahlentheorie. Ein Muß für einen Zahlennarr!

Die genannten Mathematiker bieten auf hohem Niveau eine "Mathematik zum Mitschreiben" an. Sie sind sich nicht zu schade - insbesondere Dr. Stephan und Dr. Forster - auch einen fertigen Quelltext oder ein Beispiel anzugeben. Das steht sehr im Gegensatz zu den Gepflogenheiten vieler Hochschulen. Dort gilt häufig, je schwerer verständlich ein bekanntes Problem behandelt wird, desto geeigneter ist dann der Text für eine Veröffentlichung. Ich bedauere, so ist es!

Zunächst aber die sehr einfache Definition der rekursiven Folge nach Perrin:
 

f(0) = 3,   f(1) = 0,   f(2) = 2,  ....  f(n) = f(n-2) + f(n-3)
n ist genau dann eine (Pseudo-) Primzahl, wenn f(n) durch n teilbar ist.

n          0 1 2 3 4 5 6 7  8  9 10 11 12 13 14 15 16  17
f(n)       3 0 2 3 2 5 5 7 10 12 17 22 29 39 51 68 90 119
f(n) mod n   0 0 0 2 0 5 0  2  3  7  0  5  0  9  8 10   0

Das ist alles! Mit einem Bleistift und einem Stück Papier kann man sich den einfachen Zusammenhang klar machen oder obige Zahlen weiterführen. Und wie sieht es mit einem kleinen Programm aus? Natürlich ist das schnell geschrieben. Es läuft sofort an ..... und über! Denn das ist die Kehrseite der Medaille. Die Werte für f(n) steigen extrem schnell an. Wollte man z.B. unsere nächste, prime Jahreszahl suchen, also etwa f(2003) überprüfen, dann wäre eine 245stellige Zahl auszuwerten!

Kleines Zwischenspiel: Untersucht man die Perrin-Folge, dann stößt man schnell auf die Binomialkoeffizienten, siehe auch Link 2 . Mich interessierte nun, wie man die Perrin-Folge in dem PASCALschen Dreieck (PD) ganz praktisch wiederfinden könnte, etwa ähnlich den Fibonacci-Zahlen.... Es gelingt, wenn man zwei PD verwendet, siehe Bild. Das eine PD wird mit 2 erweitert (schwarze Zahlen), das andere PD mit 3 (blaue Zahlen). Die Werte 2 und 3 sind ja die Einstiegswerte in die Perrrin-Folge! Nun werden die beiden Dreiecke ineinander verschoben, bezw. überlagert. Addiert man in schräg angelegten Zeilen, erhält man die f(n) der Perrin-Folge (rot):

Zwei PASCALsche Dreiecke liefern die Perrin-Folge.

Doch zurück zu einer rechnerischen Bearbeitung. Etwas erfahren, wird man die einzelnen Summen  jeweils modulo n ermitteln und bleibt dadurch in einem überschaubaren Zahlenbereich. Dennoch führt auch ein solcher Ansatz nicht zum gewünschten Erfolg. Denn sollte der Perrin-Test für vielstellige Zahlen auf diese Weise durchgeführt werden, dann wäre für jede zu testende Zahl neu hochzuzählen, immer unter Einschaltung von mod n. Auch dieser Weg ist  nicht  befriedigend.

Nun wird's interessant. Um mit hohen Potenzen einer Zahl zu arbeiten, etwa zu prüfen ob diese Potenz modulo m einen bestimmten Wert hat (Fermat-Test), kann das sogenannte "duale Exponentiationsschema" eingesetzt werden. Das ist nicht neu, denn schon vor mehr als 2000 Jahren benutzte man diese Rechenmethode in Indien. Da dieses Verfahren aber allgemein sehr nützlich ist, möchte ich es hier kurz abhandeln.

Zu berechnen sei x^n,   etwa mit x=3 und n=37   also   3^37 ....

x^2  x^4   x^8        x^9          x^18                x^36                                 x^37
9 ... 81 ... 6561 ... 19683 ... 387420489 ... 150094635296999121 ... 450283905890997363  =  3^37

Statt 36 Multiplikationen mit x hat man also nur 7 Rechenoperationen benötigt. Die Zahl der Operationen nimmt mit der Zahlenlänge logarithmisch ab. - Das ist nur ein kleiner Vorgeschmack auf die obigen Links, denn solche und ähnliche Operationen mit raffinierten Vorteilen werden dort verwendet...

Zu Link 2  (Dr. Stephan, ..... Zahlenfolge nach Perrin)
Der Autor verfährt ganz ähnlich und zwar bei einer "effizienten Potenzierung einer dreidimensionalen Matrix". Der Leser sollte sich die Mühe machen und dort nachsehen, es lohnt sich in jedem Falle. Auch die vorangehenden Ausführungen zu Folgen sind sehr wertvoll und verschaffen Einblick in die verschiedensten Zusammenhänge. - Sehr schnell wird der Leser den Wunsch haben, mit größeren Stellenzahlen zu rechnen. Versucht man es mit herkömmlichen Programmen, etwa mit Stringgoperationen in hohe Bereiche vorzustoßen, kann man erfolgreich sein, bleibt aber am unteren, langsamen Ende der Erfolgsleiter. Deshalb....

Zu Link 3  (Dr. Forster, "Multipräzisions-Interpreter Aribas" und "Algorithmische Zahlentheorie")
Mit dieser Software wird jedem interessierten PC-Benutzer ein wunderbares Werkzeug angeboten. Was man immer schon nachvollziehen wollte, mit Aribas gelingt es. Von Fermats "kleinem Satz" - als feste Funktion mit mod n vorhanden - über die Faktorisierung mit elliptischen Kurven bis zu diversen Zahlkörpern der Theorie reicht der Bogen. Mit etwas Programmiererfahrung in Pascal oder C - selbst Basic-Kenntnisse genügen - wird Aribas zur Brücke in die Zahlentheorie.

Als Kostprobe hier ein kurzer Quelltext in Aribas. Er basiert auf Link 2, ist aber etwas verdichtet. Die Funktion "perrin" liefert für r den Wert 0, wenn n prim bezw. pseudoprim ist:

function perrin(n: integer): integer;
external
  r: integer;
var
  a,b,c,i,k,m,u,v,w: integer;
begin
  a:=1; b:=0; c:=0; k:=1;
  i:=n mod 3; m:=n div 3;
  while k+k<m+1 do
    k:=k+k;
  end;
  while k>0 do
    u:=a; v:=b; w:=c;
    a:=u*u mod n + 2*v*w mod n;
    b:=v*v mod n + w*w   mod n + 2*u*v mod n;
    c:=v*v mod n + 2*u*w mod n + 2*v*w mod n;
    if m-k>-1 then
      u:=a; v:=b; w:=c; m:=m-k;
      a:=(u+v) mod n;
      b:=(v+w) mod n;
      c:=(u+b) mod n;
    end;
    k := k div 2;
  end;
  if      i=0 then r:=1;  (* oder: r:=(3*a+2*b) mod n;*)
    elsif i=1 then r:=(3*b+2*c) mod n;
    elsif i=2 then r:=(2*a+2*b+3*c) mod n;
  end;
  return r;
end perrin.

Anmerkung:
An einer anderen Stelle dieser Homepage steht ein 81stelliges Palindrom - prim - der Art  373737373737373...
Mit "perrin" war es ein Kinderspiel das nächst größere zu suchen. Es hat 315 Stellen:  373737373737373737373...

Ich freue mich auf Ihre Mail!