Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Primzahlen / Excel 2003

526 views
Skip to first unread message

Andreas Volkert

unread,
Nov 15, 2008, 4:53:22 PM11/15/08
to
Hallo liebe Newsgroup-Freunde,

darf ich Euch um Hilfe für folgende (schulische) Fragestellung (meiner
Tochter, 5. Klasse) bitten.

Wir wollen in einer Excel Tabelle sämtliche Primzahlen automatisiert
eintragen lassen. Ich habe dazu auch schon ein wenig gegoogelt und bin auf
folgende benutzerdefinierte Funktion gestoßen.

Function IstPrim(x) As Boolean
IstPrim = True
If x Mod 2 = 0 Then
IstPrim = False
Else
For i = 3 To Sqr(x) Step 2
If x Mod i = 0 Then
IstPrim = False
Exit Function
End If
Next
End If
End Function

Das klappt natürlich ganz wunderbar, setzt aber voraus, dass ich eine
fortlaufende Reihe mit Zahlen (sagen wir in Spalte A) habe.

Nun möchte ich das Ganze aber über VBA über eine Schleife abarbeiten und gar
nicht erst die NICHTPrimzahlen anzeigen, sondern nur die Primzahlen
untereinander stellen, also etwa so....

Suche die erste Primzahl, stelle sie in die Zelle A1, dann eine Zelle
tiefer, suche die nächste Primzahl, erneut in die Zelle (dann eben A2)
schreiben usw. usw.

1
3
5
7
11
13
...
...

Außerdem wär's schön, wenn die Funktion am Tabellenende (ich hab keine
Ahnung, wie lange es mit dieser Funktion dauert, bis die Tabelle bis zur
Zeile 65536 ausgefüllt ist) in der Spalte B, besser gesagt in der Zelle B1
weitermachen würde, um dann die nächste Spalte (also B) auzufüllen (usw...)

Es wäre ganz toll, wenn mir hier jemand mit ein wenig Programmcode unter die
Arme greifen könnte.

Ich bedanke mich schon mal ganz herzlich für alle Vorschläge und Hilfen.

Viele Grüße

AndiVolkert


Claus Busch

unread,
Nov 15, 2008, 5:34:18 PM11/15/08
to
Hallo Andreas,

Am Sat, 15 Nov 2008 22:53:22 +0100 schrieb Andreas Volkert:

> Nun möchte ich das Ganze aber über VBA über eine Schleife abarbeiten und gar
> nicht erst die NICHTPrimzahlen anzeigen, sondern nur die Primzahlen
> untereinander stellen, also etwa so....
>
> Suche die erste Primzahl, stelle sie in die Zelle A1, dann eine Zelle
> tiefer, suche die nächste Primzahl, erneut in die Zelle (dann eben A2)
> schreiben usw. usw.
>
> 1
> 3
> 5
> 7
> 11
> 13
> ...
> ...
>
> Außerdem wär's schön, wenn die Funktion am Tabellenende (ich hab keine
> Ahnung, wie lange es mit dieser Funktion dauert, bis die Tabelle bis zur
> Zeile 65536 ausgefüllt ist) in der Spalte B, besser gesagt in der Zelle B1
> weitermachen würde, um dann die nächste Spalte (also B) auzufüllen (usw...)

schau dazu mal hier rein:
http://groups.google.de/group/microsoft.public.de.excel/browse_thread/thread/312ef430f5d7afc5/9f47b861f068362d?lnk=gst&q=primzahlen#9f47b861f068362d


Mit freundlichen Grüssen
Claus Busch
--
Win XP Prof SP3 / Vista Ultimate
Office 2003 SP3 / 2007 Ultimate SP1

Klaus "Perry" Pago

unread,
Nov 15, 2008, 5:48:22 PM11/15/08
to
Hallo Miteinander,

"Claus Busch" <claus...@t-online.de> schrieb im Newsbeitrag
news:eehnOJ3R...@TK2MSFTNGP02.phx.gbl...

cooles VBA-Proggi

mich wundert nur, dass 5.-Klässler sich mit VBA beschäftigen sollen.
Vermutlich soll nur eine Excel-Spalte befüllt werden und nicht programmiert
werden. Dann bleibt eigentlich nur noch das "Sieb des Eratosthenes" durch
systematisches Streichen von Vielfachen.

Gruß
Klaus

Thomas Ramel

unread,
Nov 16, 2008, 2:29:36 AM11/16/08
to
Grüezi Andreas

Andreas Volkert schrieb am 15.11.2008

> Wir wollen in einer Excel Tabelle sämtliche Primzahlen automatisiert
> eintragen lassen.

...das glaube ich kaum, da noch gar nicht alle Primzahlen bekannt sind und
Excle dazu auch nicht das geeignete Instrument ist... ;-)

> Suche die erste Primzahl, stelle sie in die Zelle A1, dann eine Zelle
> tiefer, suche die nächste Primzahl, erneut in die Zelle (dann eben A2)
> schreiben usw. usw.
>
> 1
> 3
> 5
> 7
> 11
> 13
> ...
> ...
>
> Außerdem wär's schön, wenn die Funktion am Tabellenende (ich hab keine
> Ahnung, wie lange es mit dieser Funktion dauert, bis die Tabelle bis zur
> Zeile 65536 ausgefüllt ist) in der Spalte B, besser gesagt in der Zelle B1
> weitermachen würde, um dann die nächste Spalte (also B) auzufüllen (usw...)

Das musst Du dann vielleicht selbst noch programmieren und das
Anfangs-Array im folgenden Code entsprechend setzen.

Jedenfalls entspricht der Code dem von Klaus genannten Sieb des
Erathostenes und liefert, so wie er da steht, die ersten 60'000 Prinzahlen,
aufgelistet in Spalte A.
Nett daran ist, dass es nur knapp ein halbe Sekunde dauert, die Primzahlen
aufzulisten.

Option Explicit
Option Base 1

Public Sub Thom()
Const pMax As Long = 1000000 'höchste zu berechnende Zahl
Dim p(pMax) As Boolean 'Hilfs-Array
Dim x(60000, 1) As Long 'Primzahlen-Array
Dim lngX As Long
Dim lngP As Long
Dim lngI As Long

lngP = 1
lngX = 0
Do
lngX = lngX + 1
Do
lngP = lngP + 1
Loop Until Not p(lngP)
For lngI = lngP To UBound(p()) Step lngP
p(lngI) = True
Next lngI
x(lngX, 1) = lngP
Loop Until lngX = 60000
Range("A1:A60000") = x
End Sub


Etwas schneller (allerdings auch komplexer) wäre der Kiebart-Kamm.

Mit freundlichen Grüssen
Thomas Ramel

--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-3]
Microsoft Excel - Die ExpertenTipps

Hajo_Zi

unread,
Nov 16, 2008, 2:41:00 AM11/16/08
to
Hallo Andreas,

such mal auf der Seite http://www.excelformeln.de/suche.html nach Primzahlen
und Du bekommst VBA freie Berechnungen.


Gruß Hajo
MVP für Microsoft Excel
Betriebssystem Vista Ultimate SP1 und Excel Version2007 SP1
http://Hajo-Excel.de/


"Andreas Volkert" wrote:

> ....

Klaus "Perry" Pago

unread,
Nov 16, 2008, 4:00:09 AM11/16/08
to
Hallo Thomas und Andreas,

"Thomas Ramel" <t.r...@MVPs.org> schrieb im Newsbeitrag
news:1nkdriuluilam$.1vnbo63u30tfr.dlg@40tude.net...

für 5.-klässler hatte ich eher daran gedacht, in Spalte A (ab A2) die Zahlen
von 2 bis 65.536 zu erzeugen und waagrecht beginnend mit C2 die Teiler von 2
bis 255 einzutragen. In jedem Feld dieser Matrix wird nun ermittelt, ob bei
der Division der Spalte-A-Zahl ein Rest entsteht oder nicht. In Spalte B
kann nun die Zeile ausgewertet werden und so auf prim oder nichtprim der
Spalte-A-Zahl geschlossen werden.
VBA und auch die von Hajo empfohlene Matrixformelseite werden einem
11-Jährigen IMO nicht gerecht.

Mit diesem klassischen Primzahlverfahren werden nicht die ersten 65.536
Primzahlen ermittelt (wen interessieren die überhaupt) sondern nur
festgestellt, welche von den ersten 65.536 Zahlen prim sind. Ein eigenes
kindgerechtes Lösungsverfahren zu entwickeln ist IMO lehrreicher als fremde
Formeln abzuschreiben.

Gruß
Klaus

Martin Draheim

unread,
Nov 16, 2008, 5:54:42 AM11/16/08
to
Andreas Volkert wrote:


> Wir wollen in einer Excel Tabelle sämtliche Primzahlen automatisiert
> eintragen lassen.

Sämtliche? ..... das wird Zeit brauchen....

--

MfG, Martin


Martin Draheim

unread,
Nov 16, 2008, 5:55:56 AM11/16/08
to
Thomas Ramel wrote:

>> Wir wollen in einer Excel Tabelle sämtliche Primzahlen automatisiert
>> eintragen lassen.
>
> ...das glaube ich kaum, da noch gar nicht alle Primzahlen bekannt
> sind

Doch

und Excle dazu auch nicht das geeignete Instrument ist... ;-)

ack

--

MfG, Martin


Klaus "Perry" Pago

unread,
Nov 16, 2008, 6:17:13 AM11/16/08
to
Hallo Martin,

"Martin Draheim" <M.Dr...@directbox.de> schrieb im Newsbeitrag
news:6oachsF...@mid.individual.net...


> Thomas Ramel wrote:
>
>> ...das glaube ich kaum, da noch gar nicht alle Primzahlen bekannt
>> sind
>
> Doch

das ist falsch - schon Euklid hat bewiesen, dass es keine größte Primzahl
gibt.

Die größte zZ bekannte Primzahl lautet

(2 hoch 43.112.609) minus 1

Gruß
Klaus

Thomas Ramel

unread,
Nov 16, 2008, 11:33:04 AM11/16/08
to
Grüezi Klaus

Klaus "Perry" Pago schrieb am 16.11.2008

> für 5.-klässler hatte ich eher daran gedacht, in Spalte A (ab A2) die Zahlen
> von 2 bis 65.536 zu erzeugen und waagrecht beginnend mit C2 die Teiler von 2
> bis 255 einzutragen. In jedem Feld dieser Matrix wird nun ermittelt, ob bei
> der Division der Spalte-A-Zahl ein Rest entsteht oder nicht. In Spalte B
> kann nun die Zeile ausgewertet werden und so auf prim oder nichtprim der
> Spalte-A-Zahl geschlossen werden.
> VBA und auch die von Hajo empfohlene Matrixformelseite werden einem
> 11-Jährigen IMO nicht gerecht.

Full ack - das scheint mir als Lern-Ansatz ebenfalls besser geeignet zu
sein.

Thomas Ramel

unread,
Nov 16, 2008, 11:35:32 AM11/16/08
to
Grüezi Martin

Martin Draheim schrieb am 16.11.2008

> Thomas Ramel wrote:
>
>>> Wir wollen in einer Excel Tabelle sämtliche Primzahlen automatisiert
>>> eintragen lassen.
>>
>> ...das glaube ich kaum, da noch gar nicht alle Primzahlen bekannt
>> sind
>
> Doch

Hmmm, wie genau meinst Du das?
Hast Du vielleicht noch substantiellere Belege als dein 'Doch'?

Da die Anzahl natürlicher Zahlen unendlich ist (es lässt sich die jeweils
als grösste Zahl angenommene stets um 1 erhöhen) gilt dasselbe auch für die
Primzahlen....

Michael v. Fondern

unread,
Nov 16, 2008, 11:47:01 AM11/16/08
to
Hallo Andreas,

> darf ich Euch um Hilfe für folgende (schulische) Fragestellung (meiner
> Tochter, 5. Klasse) bitten.
>
> Wir wollen in einer Excel Tabelle sämtliche Primzahlen automatisiert
> eintragen lassen. Ich habe dazu auch schon ein wenig gegoogelt und bin auf
> folgende benutzerdefinierte Funktion gestoßen.
>
> Function IstPrim(x) As Boolean
> IstPrim = True
> If x Mod 2 = 0 Then
> IstPrim = False
> Else
> For i = 3 To Sqr(x) Step 2
> If x Mod i = 0 Then
> IstPrim = False
> Exit Function
> End If
> Next
> End If
> End Function
>

und wenn die Funktion jetzt noch berücksichtigen würde, dass 2 eine
Primzahl ist, sowie 1 und 0 nicht, dann wäre sie sogar richtig. Also
z.B. so:

Function IstPrim(x As Long) As Boolean
Dim i As Long
IstPrim = True
If x <= 1 Then
IstPrim = False
ElseIf x > 2 And x Mod 2 = 0 Then


IstPrim = False
Else
For i = 3 To Sqr(x) Step 2
If x Mod i = 0 Then
IstPrim = False
Exit Function
End If
Next
End If
End Function

> Das klappt natürlich ganz wunderbar, setzt aber voraus, dass ich eine
> fortlaufende Reihe mit Zahlen (sagen wir in Spalte A) habe.

Die Funktion tut, was sie soll. Du musst sie nur so verwenden, wie du
sie brauchst.

>
> Nun möchte ich das Ganze aber über VBA über eine Schleife abarbeiten und gar
> nicht erst die NICHTPrimzahlen anzeigen, sondern nur die Primzahlen
> untereinander stellen, also etwa so....

Es gilt in den meisten Newsgroups als verpönt, anderer Leute
Schulaufgaben zu lösen. Aber um die einen Tipp zu geben: per VBA kannst
du mit

Cells(10, 20) = x

einen Wert in eine Zeile 10, Spalte schreiben. Programmier halt eine
Schleife über alle Spalten, darin eine Schleife über alle Zeilen, und
darin eine dritte Schleife der Form

while not IstPrim(x)
x=x+1
wend

Am Ende gibst du dann x in der nächsten Zelle aus.

Wenn du unbedingt 256*65536 Werte berechnen willst, dürfte das mit
dieser Technik viel zu lange laufen, als dass du darauf warten willst
(die erste Spalte füllt sich sehr schnell, aber das Programm wird halt
von Spalte zu Spalte langsamer. Schneller geht's natürlich mit dem Sieb
des Eratosthenes. Aber mal im Ernst: was willst du oder deine Tochter
mit einer solch großen Tabelle anfangen?

Grüße

- Michael -

Michael v. Fondern

unread,
Nov 16, 2008, 11:48:58 AM11/16/08
to
Hallo Thomas,

>
> Da die Anzahl natürlicher Zahlen unendlich ist (es lässt sich die jeweils
> als grösste Zahl angenommene stets um 1 erhöhen) gilt dasselbe auch für die
> Primzahlen....

das hast du sicher anders gemeint, als du es geschrieben hast :-)

Grüße

- Michael -

Thomas Ramel

unread,
Nov 16, 2008, 11:59:30 AM11/16/08
to
Grüezi Michael

Michael v. Fondern schrieb am 16.11.2008

...eigentlich nicht - wobei die Prims natürlich nicht einfach um 1 erhöht
werden können. Die Analogie besteht vielmehr in der Unendlichkeit.

...oder habe ich mit vollends vertan...?

Martin Hentrich

unread,
Nov 16, 2008, 12:09:30 PM11/16/08
to
On Sun, 16 Nov 2008 11:55:56 +0100, "Martin Draheim"
<M.Dr...@directbox.de> wrote:

>> ...das glaube ich kaum, da noch gar nicht alle Primzahlen bekannt
>> sind
>
>Doch

Doch was?

Fakt: Es sind nicht alle Primzahlen bekannt!

Martin
--
Stil ist richtiges Weglassen des Unwesentlichen.
[Anselm Paul Johann Ritter von Feuerbach]

Martin Hentrich

unread,
Nov 16, 2008, 12:12:27 PM11/16/08
to
On Sat, 15 Nov 2008 22:53:22 +0100, "Andreas Volkert"
<and...@discussions.microsoft.com> wrote:

>Wir wollen in einer Excel Tabelle sämtliche Primzahlen automatisiert
>eintragen lassen.

*sämtliche*?

Primzahlentheorie ist alles andere als simpel:
http://de.wikipedia.org/wiki/Mersenne-Primzahl

Andreas Volkert

unread,
Nov 16, 2008, 3:44:47 PM11/16/08
to
Hallo liebe Newsgroup-Freunde,

> darf ich Euch um Hilfe für folgende (schulische) Fragestellung (meiner
> Tochter, 5. Klasse) bitten.
>
> Wir wollen in einer Excel Tabelle sämtliche Primzahlen automatisiert
> eintragen lassen. Ich habe dazu auch schon ein wenig gegoogelt und bin auf
> folgende benutzerdefinierte Funktion gestoßen.


ich danke Euch allen ganz herzlich für Euer Engagement und die vielen
Mutmaßungen, die Ihr im Hinblick auf die Aufgabenstellung angestellt habt.

Nein, natürlich ist das keine Aufgabe, die einer 10-jährigen zugemutet wird,
aber da ich ihr Excel ein wenig näher bringen wollte, passte das Thema
Primzahlen, das sie gerade in der Schule hat eigentlich ganz gut dazu.
Zunächst hatten wir auch nur in einer fortlaufenden Liste die Primzahlen
gekennzeichnet, aber dann erwachte ihr Interesse an den Zahlen und so
fragten wir uns, ob man nur die Primzahlen in eine Liste schreiben könne.
Und so entstand dann auch die Anfrage bei Euch.

Vielen Dank für die tollen Tipps und Lösungsvorschläge.

Viele Grüße aus München

Michael v. Fondern

unread,
Nov 17, 2008, 2:30:56 AM11/17/08
to
Hallo Thomas,

>>> Da die Anzahl natürlicher Zahlen unendlich ist (es lässt sich die jeweils
>>> als grösste Zahl angenommene stets um 1 erhöhen) gilt dasselbe auch für die
>>> Primzahlen....
>> das hast du sicher anders gemeint, als du es geschrieben hast :-)
>
> ...eigentlich nicht - wobei die Prims natürlich nicht einfach um 1 erhöht
> werden können. Die Analogie besteht vielmehr in der Unendlichkeit.
>
> ...oder habe ich mit vollends vertan...?

Natürlich gibt es unendlich viele Primzahlen. Aber allein aus der
Tatsache, dass die Anzahl natürlicher Zahlen unendlich ist, lässt sich
das nicht schließen (das wäre allenfalls andersherum richtig). Da
benötigt man schon einen der vielen Beweise des Satzes von Euklid, siehe
z.B. hier (Link in einer Zeile):

http://de.wikibooks.org/wiki/Beweisarchiv:_Zahlentheorie:_Elementare_Zahlentheorie:_Satz_von_Euklid

Grüße

- Michael -

thomas...@gmail.com

unread,
Nov 17, 2008, 2:44:26 AM11/17/08
to
Grüezi Michael

On 17 Nov., 08:30, "Michael v. Fondern" <spammeh...@hotmail.com>
wrote:

> http://de.wikibooks.org/wiki/Beweisarchiv:_Zahlentheorie:_Elementare_...

...das ist jetzt aber Haarspalterei ;-)

Zitat aus dem Artikel:
"Mit dieser Formulierung umging Euklid geschickt den Begriff des
Unendlichen, wenngleich seine damalige Formulierung "zu jeder
endlichen Liste von Primzahlen lässt sich eine weitere hinzufügen"
äquivalent zu der Aussage ist, dass es unendlich viele Primzahlen
gibt."

...ich habe halt den Begriff des Unendlichen nicht umgangen ;-)


--
Mit freundlichen Grüssen

Thomas Ramel
- MVP für MS-Excel -

Peter Schabesberger

unread,
Nov 17, 2008, 5:54:55 AM11/17/08
to
Nur so nebenbei:

der Sohn (8 Jahre) meines Kollegen fragte diesen mal nach der Größten Zahl
der Welt, darauf hin antwortete er mit der umgelegten 8 für Unendlich.
Der Sohn schaute und fragte dann: "und die davor?"

nun... schwierig...

Peter


Martin Hentrich

unread,
Nov 17, 2008, 9:10:14 AM11/17/08
to
On Mon, 17 Nov 2008 11:54:55 +0100, "Peter Schabesberger"
<peter.sch...@de.bosch.com> wrote:

>nun... schwierig...

Unendlich minus eins. ;-)

Martin
--
Da lief Philippus hin und hörte, daß er den Propheten Jesaja las,
und fragte: Verstehst du auch, was du liest? Er aber sprach: Wie
kann ich, wenn mich nicht jemand anleitet?
[Apost. 8, 30-31]

Michael v. Fondern

unread,
Nov 17, 2008, 1:57:32 PM11/17/08
to
Hallo Thomas,

>
> ...das ist jetzt aber Haarspalterei ;-)
>

geschrieben hattest du wörtlich

> "da die Anzahl natürlicher Zahlen unendlich ist [...]


> gilt dasselbe auch für die Primzahlen...."

Was ist daran Haarspalterei, darauf hinzuweisen, dass du eine derart
offensichtlich falsche Schlussfolgerung sicher nicht so gemeint hast?

Grüße

- Michael -

Michael v. Fondern

unread,
Nov 17, 2008, 2:02:17 PM11/17/08
to
Hallo Peter,

ja, kann man wohl sagen, vgl. hierzu

http://de.wikipedia.org/wiki/Kardinalzahl_(Mathematik)

und in dem Artikel insbesondere die Kardinalzahlen Aleph_...

Thomas Ramel

unread,
Nov 17, 2008, 2:32:36 PM11/17/08
to
Grüezi Michael

Michael v. Fondern schrieb am 17.11.2008

Ausgehend von der Tatsache, dass die Menge natürlicher Zahlen unendlich
ist, liegt es für mich (nebst dem Euklidschen Beweis) auf der Hand dass
auch immer wieder mal eine davon eine Primzahl ist.

...aber vielleicht ist da mein Verständnis zum Thema etwas sehr einfach
gestrickt...? ;-)


Mit freundlichen Grüssen
Thomas Ramel

--

Michael v. Fondern

unread,
Nov 17, 2008, 4:41:05 PM11/17/08
to
Hallo Thomas,

> Ausgehend von der Tatsache, dass die Menge natürlicher Zahlen unendlich
> ist, liegt es für mich (nebst dem Euklidschen Beweis) auf der Hand dass
> auch immer wieder mal eine davon eine Primzahl ist.
>
> ...aber vielleicht ist da mein Verständnis zum Thema etwas sehr einfach
> gestrickt...? ;-)

Wenn es so einfach wäre, läge es auch auf der Hand, dass es unendlich
viele Primzahlzwillinge gibt. Leider konnte das bis heute noch keiner
schlüssig beweisen.

Grüße

- Michael -

Klaus "Perry" Pago

unread,
Nov 17, 2008, 5:19:35 PM11/17/08
to
Hallo Michael,

"Michael v. Fondern" <spamm...@hotmail.com> schrieb im Newsbeitrag
news:O2Oqy0PS...@TK2MSFTNGP02.phx.gbl...


>
> Wenn es so einfach wäre, läge es auch auf der Hand, dass es unendlich
> viele Primzahlzwillinge gibt. Leider konnte das bis heute noch keiner
> schlüssig beweisen.

Dan Goldston und Cen Yildirim scheinen schon dicht dran zu sein - bin 'mal
gespannt, ob und wenn ja wann sie es schaffen.

Gruß
Klaus

Thomas Ramel

unread,
Nov 18, 2008, 12:56:06 AM11/18/08
to
Grüezi Michael

Michael v. Fondern schrieb am 17.11.2008

>> Ausgehend von der Tatsache, dass die Menge natürlicher Zahlen unendlich

Ok, ok, ich denke wir lassen das Thema - beide wissen wir was wie gemeint
war....

0 new messages