Microsoft Excel

Das Portal zum Thema Excel-Formeln

Gruppe: Mathematische Funktionen - BEITRAG: Primzahlen bis zur Excel-Rechengrenze


Aufgabe
Durch die Erzeugung eines Index-Arrays mit mehr als 65.536 Elementen ist es möglich, für Zahlen bis theoretisch
(65.536 * 256 * 2) ^ 2 Primzahlen zu berechnen.
Das sind anders ausgedrückt 2^50 oder 1,12 Billiarden.

Die Rechendauer wird dabei aber sehr langsam, im Beispiel wird deshalb nur bis (65.536 * 10 * 2) ^2 = 1.717.986.918.400 gerechnet.

Es handelt sich hier nicht um ein Praxisbeispiel.
Nur für Theoretiker!
Schnelle Formeln zur Primzahlenermittlung siehe Nr. 129
Lösung
Es wird ein Name "Feld" vergeben bezogen auf die Formel
=(ZEILE(INDIREKT("Tabelle1!$1:$65536"))*2+1+65536*SPALTE(Tabelle1!$A$1:$J$1)*2+1)-65536*2+1
sie enthält ein Array mit den Zahlen von 5 bis 1.310.723 in zweierschritten (Gerade Zahlen werden nicht benötigt)

Ab A1 abwärts stehen die Zahlen 11,13,15..., in der Zelle daneben steht
{=WENN(SUMME(WENN((GANZZAHL(A1/Feld)=A1/Feld);1))>WENN(A1>MAX(Feld);0;1);"";"PRIMZAHL")}

Die höchste in diesem Bereich ermittelbare Primzahl ist 1.717.986.918.397

Wenn man die "Spalten"-anzahl auf 30 erhöht, ist die höchste zu ermittelnde Primzahl 15.461.882.265.563
Bei 256 "Spalten" geht's theoretisch bis (256*65536*2)^2= 1.125.899.906.842.620

Das ist natürlich blanke Theorie, die nur beweisen soll, daß bis zur Excelrechengrenze theoretisch alle Primzahlen ermittelt werden können.
Die Rechendauer ist zu groß( zumindest bei unseren Rechnern).

Die Formel funktioniert ab 11 und darf nur auf ungerade Zahlen angewendet werden.
Erläuterung
Wie kommen die (65.536 * 10 * 2) ^2 zu Stande ?

Das Array ist dimensioniert mit 65536 Zeilen und 10 Spalten. Es wird in zweierschritten gegangen, da gerade Zahlen nicht geprüft werden müssen. Das grösste Element des Arrays ist somit 1.310.723

Da eine Zahl nur bis zur Wurzel geprüft werden muß ist die höchste prüfbare Zahl = 1.310.723^2.

Index mit mehr als 65.536 Elementen, so geht's:

{=(ZEILE(1:5)+5*SPALTE(A1:E1))-5} enthält die Zahlen von 1 bis 25 (5 Zeilen * 5 Spalten)

zum Beweis in A1 schreiben:
{=KKLEINSTE((ZEILE($1:$5)+5*SPALTE(A$1:E$1))-5;ZEILE())}
und bis A 25 runterkopieren

{=(ZEILE(1:10)+10*SPALTE(A1:E1))-10} enthält schon 50 Elemente (10 Zeilen * 5 Spalten)

{=(ZEILE(1:65536)+65536*SPALTE(A1:E1))-65536} enthält 327.680 Elemente (65536 Zeilen * 5 Spalten)
Beweise
{=MAX((ZEILE(1:65536)+65536*SPALTE(A1:E1))-65536)}
{=ANZAHL((ZEILE(1:65536)+65536*SPALTE(A1:E1))-65536)}
ergibt beides 327.680