Microsoft Excel

Das Portal zum Thema Excel-Formeln

Gruppe: Mathematische Funktionen - BEITRAG: eine Liste aus Primzahlen erzeugen


Aufgabe
Wie kann man ohne Hilffspalten eine Liste aller Primzahlen bis 1000 erzeugen?
Lösung
Alle Primzahlen bis 100:
in A1 steht
{=KKLEINSTE(WENN(MMULT((WENN(SPALTE(B:K)=ZEILE($2:$100);1;REST(ZEILE($2:$100);SPALTE(B:K)))=0)*1;ZEILE($1:$10)/ZEILE($1:$10))=0;ZEILE($2:$100));ZEILE())}
(bis A25 kopieren)

Alle Primzahlen bis 1000:
in A1 steht
{=KKLEINSTE(WENN(MMULT((WENN(SPALTE(B:AG)=ZEILE($2:$1000);1;REST(ZEILE($2:$1000);SPALTE(B:AG)))=0)*1;ZEILE($1:$32)/ZEILE($1:$32))=0;ZEILE($2:$1000));ZEILE())}
(bis A168 kopieren)

Bei noch größeren Primzahlenlisten gibt der Rechner seinen Geist auf.
Außerdem kann MMULT nur Arrays mit maximal 5461 Elementen berechnen.


Übrigens, bis 10.000 gibt es
{=SUMME(WENN(MMULT((WENN(SPALTE(B:CV)=ZEILE($1:$5000)*2+1;1;REST(ZEILE($1:$5000)*2+1;SPALTE(B:CV)))=0)*1;ZEILE($1:$99)/ZEILE($1:$99))=0;1))+1}
=1.229 Primzahlen

XL 2007:
Die Rechengrenze von MMULT ist in XL 2007 aufgehoben. Deshalb kann die Formel erweitert werden. bis 40.000 gibt es
{=SUMME(WENN(MMULT((WENN(MTRANS(ZEILE(2:200))=ZEILE($1:$20000)*2+1;1;REST(ZEILE($1:$20000)*2+1;MTRANS(ZEILE(2:200))))=0)*1;ZEILE($1:$199)/ZEILE($1:$199))=0;1))+1}
=4.203 Primzahlen

Viel höher kann man aber trotzdem nicht gehen, weil sonst der PC um Gnade winselt.


Erläuterung
Eigentlich ist es nur ne Spielerei; - und man legt seinen Rechner vorübergehend lahm.
Aber: die Aufgabe erschien uns lange nicht zu knacken, so daß wir die Lösung mit MMULT präsentieren müssen!

Mit folgenden Formeln können Primzahlen viel, viel schneller aufgelistet werden. In A1 steht eine Zahl >8 (Funktioniert nämlich erst ab der Primzahl 11)

Vergebe die Namen
Ausgangszahl:=INDIREKT("Z(-1)S";0)
Reichweite:=50
(Vordefinition des maximalen Primzahlabstandes, 50 ist für die ersten 1000 Primzahlen mehr als ausreichend)
Zahlen:=ZEILE(INDIREKT(Ausgangszahl+1&":"&Ausgangszahl+Reichweite))
Teiler:=ZEILE(INDIREKT("2:"&AUFRUNDEN((Ausgangszahl+Reichweite)^0,5;0)))

Dann schreibe in A2
{=MIN(WENN(MMULT((REST(Zahlen;MTRANS(Teiler))=0)*1;WENN(Teiler;1))=0;Zahlen))}
und kopiere die Formel bis A1000. Die ersten 1000 Primzahlen erscheinen dann in nullkommanix.

Als eine Formel ohne namen steht in A2
{=MIN(WENN(MMULT((REST(ZEILE(INDIREKT(A1+1&":"&A1+50));MTRANS(ZEILE(INDIREKT("2:"&AUFRUNDEN((A1+50)^0,5;0)))))=0)*1;WENN(ZEILE(INDIREKT("2:"&AUFRUNDEN((A1+50)^0,5;0)));1))=0;ZEILE(INDIREKT(A1+1&":"&A1+50))))}

Warum das so ist, beschreiben wir in Excel - Das Zauberbuch