Fractran

Fractran ist eine Programmiersprache von John Horton Conway. Man definiert einen Startwert i und ein Programm, das aus einer Liste von Brüchen besteht. Das Programm läuft ab, indem nacheinander für alle Brüche getestet wird, ob das Produkt eines Bruchs und i eine natürliche Zahl ist. Wenn ja, dann ist dieses Produkt der neue Wert von i und der Test beginnt wieder mit dem ersten Bruch. Erfüllt kein Bruch die Bedingung, dann ist das Programm beendet.

Wird als Startwert 2 und als Programm 17/91, 78/85, 19/51, 23/38, 29/33, 77/29, 95/23, 77/19, 1/17, 11/13, 13/11, 15/2, 1/7, 55/1 verwendet, dann kann man alle Primzahlen ermitteln, indem man für jedes weitere berechnete i testet, ob es eine natürliche Zahl p mit der Bedingung 2^p=i gibt, wobei p dann die nächste Primzahl ist.

Es gibt auch Fractran-Programme, die die n.-Stelle von PI berechnen oder die Fibonacci-Folge. Unter http://www.mathematik.uni-bielefeld.de/~sillke/NEWS/fractran gibt es eine Sammlung von eMails, in der auch Conway einen Beweis für das Primzahlenprogramm angibt. Daraus kann ableiten, daß der der Algorithmus wahrscheinlich nicht für große Primzahlen geeignet ist, da er für jede zu testende Primzahl n alle Zahlen von n-1 bis 1 durchgeht, um die Teilbarkeit zu prüfen. Interessanterweise sind in dem Programm unter http://mathworld.wolfram.com/Fractran.html zwei Brüche anders, es scheint aber damit zu laufen.

Eine C-Implementierung von mir (basierend auf einer Python-Implementierung) erzeugte für die ersten 100 Millionen Durchgänge in 415 Sekunden auf meinem Pentium III 1 GHz unter Linux die ersten 81 Primzahlen von 2 bis 419 (Ergebnis siehe unten).

Dabei stellen sich mir zwei Fragen:

1. Für welche Startzahlen werden Primzahlen generiert, außer für 2? Mit 123 als Startwert z.B. kommen sehr schöne symmetrische Muster heraus, wenn man sich die Zahlenfolge anschaut, aber keine einzige Zahl (zumindest soweit ich das getestet habe), die die Bedingung 2^p=i erfüllt.

2. Bricht der Test für ein erfolgreiches Produkt bei Primzahlen immer beim neunten Bruch ab? Bei den ersten 81 Primzahlen war das zumindest der Fall.

Anzahl Durchläufe Wert von i
192^2
692^3
2812^5
7102^7
23752^11
38932^13
81022^17
113612^19
192682^23
369812^29
456802^31
754172^37
1013542^41
1180932^43
1523442^47
2157972^53
2938972^59
3275712^61
4292292^67
5082842^71
5564942^73
7010082^79
8093812^83
9907462^89
12749522^97
14359572^101
15318542^103
17127012^107
18200852^109
20219382^113
28356282^127
31073932^131
35492882^137
37238212^139
45532432^149
47591802^151
53337812^157
59626212^163
64053322^167
71252632^173
78735552^179
81693492^181
95478162^191
98840882^193
105009572^197
108584382^199
128787032^211
151450982^223
159649272^227
164381932^229
173020722^233
186425762^239
191667042^241
215744412^251
231683462^257
248169022^263
265177852^269
271803822^271
289854912^277
302432522^281
309657752^283
342981232^293
393192352^307
408606082^311
417443042^313
433458592^317
492780232^331
519554722^337
566241272^347
577226032^349
597094482^353
627485342^359
670601722^367
703907232^373
738864672^379
762260522^383
797969052^389
848421392^397
874072162^401
928554302^409
995744752^419

4. Januar 2002, Frank Buß