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
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
"Claus Busch" <claus...@t-online.de> schrieb im Newsbeitrag
news:eehnOJ3R...@TK2MSFTNGP02.phx.gbl...
>
> schau dazu mal hier rein:
> http://groups.google.de/group/microsoft.public.de.excel/browse_thread/thread/312ef430f5d7afc5/9f47b861f068362d?lnk=gst&q=primzahlen#9f47b861f068362d
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
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
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:
> ....
"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
> Wir wollen in einer Excel Tabelle sämtliche Primzahlen automatisiert
> eintragen lassen.
Sämtliche? ..... das wird Zeit brauchen....
--
MfG, Martin
>> 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
"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
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.
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....
> 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 -
das hast du sicher anders gemeint, als du es geschrieben hast :-)
Grüße
- 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...?
>> ...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]
>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
> 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
>>> 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 -
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 -
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
>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]
>
> ...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 -
ja, kann man wohl sagen, vgl. hierzu
http://de.wikipedia.org/wiki/Kardinalzahl_(Mathematik)
und in dem Artikel insbesondere die Kardinalzahlen Aleph_...
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
--
> 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 -
"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
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....