Schnellster Primzahlenrechner ever
Übersicht

![]() |
DAKBetreff: Schnellster Primzahlenrechner ever |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich hab hier einen Primzahlenrechener gemacht der schneller arbeitet als alle die ich bis jetzt gesehen hab.
Code: [AUSKLAPPEN] ;Made by DAK
k = 1 Print "1" ;Das Print "1" bis Print "3" ist deswegen, weil der Rechner Print "2" ;1, 2 und 3 nicht errechnet. Print "3" Repeat p = 6 * k - 1 Print p p = 6 * k + 1 k = k + 1 Print p Until KeyHit(1) end |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
- Zuletzt bearbeitet von DAK am Fr, Aug 26, 2005 11:11, insgesamt einmal bearbeitet
Absoluter Beginner |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
1 ist keine Primzahl , dafür aber 7 und 13 uvm! | ||
Error Inside! |
![]() |
Commander-Tobi |
![]() Antworten mit Zitat ![]() |
---|---|---|
welchen sinn hat eigentlich
p = 6 * k + 1 ? |
||
AMD Athlon XP 2400+ ; 1,25 GB-RAM ;
G-Force 6600 256MB; 400 GB HD User posted image |
Absoluter Beginner |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
bestimmt hat DAK noch ein "Print p" danach vergessen
trotzdem funktioniert das nicht richtig... |
||
Error Inside! |
![]() |
Hip Teen |
![]() Antworten mit Zitat ![]() |
---|---|---|
nette Idee, spuckt aber viel zu viel falsches aus.
Wenn k 6 ist z.B. kriegt man 35, soweit ich Mathematik kann ist das keine Primzahl. genauso 65, 95... und wenn man noch p = 6 * k + 1 ausgeben lässt, erhöht sich die Fehlerzahl enorm ![]() |
||
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger" |
lettorTrepuS |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
meine mathe lererin hat behauptet, für alle
Primzahlen p>3 gilt p = k*6 (+-) 1 aber da habt ihr recht, das zeug bringt fehler. jetzt versuch ichs mit dem Satz von Euklid. (p(n + 1) = p1 * p2 * p3 * ...... * pn) |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
stfighter01 |
![]() Antworten mit Zitat ![]() |
---|---|---|
dann kannst du deiner mathelehrering ja jetzt den beweis liefern das dem nicht so ist ![]() mfg stf |
||
Denken hilft! |
![]() |
SoNenTyp |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nein moment das hast du falsch verstanden.
Sie meinte das du diese Formel auf jede Primzahl anwenden kannst, aber nicht das jede zahl die du damit heraus bekommst auch eine Primzahl ist. |
||
Gruss Der Typ.
User posted image |
![]() |
Triton |
![]() Antworten mit Zitat ![]() |
---|---|---|
Abgesehen davon, dass dieses Programm falsche Ergebnisse liefert, gilt es das zu schlagen:
Triton hat Folgendes geschrieben: BlitzBasic: [AUSKLAPPEN]
Für die Primzahlen bis 1 mio dauert es 578 ms. Für die ersten 500.000 Pz (bis 7368811) dauert es bei mir 7365 ms. ( https://www.blitzforum.de/viewtopic.php?t=11977 ) |
||
Coding: silizium-net.de | Portfolio: Triton.ch.vu |
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab den Fehler bei meinem gefunden (für alle primzahlen p>3 gilt p=k*6(+-)1 aber nicht für alle zahlen p=k*6(+-)1 gilt, das sie primzahlen sind).
deswegen hab ich den von triton etwas optimiert und einen schnelleren daraus gemacht: Code: [AUSKLAPPEN] ; Original by Triton, verbessert by DAK
Graphics 400,300,32,2 AppTitle("Primzahlen") zahl=3 k = 1 endzahl=1000000 ;7368809 Global j=Sqr(endzahl) Global a1,i,t2 Dim pz(j) Print "Ermittle Primzahlen von "+Zahl+" bis "+endzahl+"." Print "..." DeleteFile("primzahlen"+txt+".txt") dat=WriteFile("primzahlen"+txt+".txt") CloseFile dat dat=OpenFile("primzahlen"+txt+".txt") WriteLine dat,"2" t1=MilliSecs() For z1=3 To j Step 2 If primzahlalt(z1) = 1 Then pz(a1)=z1 a1=a1+1 WriteLine dat,z1 End If Next While Not KeyDown(1) If primzahl(zahl) = 1 Then WriteLine dat,Str(zahl) i=i+1 End If ;If i Mod 10000 = 0 Then Print zahl If zahl>endzahl Then t2=MilliSecs()-t1 WriteLine dat, i+a1+" Primzahlen gefunden." WriteLine dat,"Es hat "+t2+" ms gedauert." t1=MilliSecs() CloseFile dat stats() End If If wechsel = 1 Then zahl=6 * k - 1 wechsel = 0 k = k + 1 EndIf If wechsel = 0 Then zahl=6 * k - 1 wechsel = 1 EndIf Wend ;--- Function stats() Print i+a1+" Primzahlen gefunden." Print "Es hat "+t2+" ms gedauert." Print "" Print "Bye." WaitKey End End Function ;--- Function primzahl(zahl) For i2=0 To a1-1 Step 1 If (zahl Mod pz(i2) = 0) Then Return 0 Next Return 1 End Function ;--- Function primzahlalt(zahl) For teiler=3 To Sqr(zahl) Step 2 If (zahl Mod teiler = 0) Then Return 0 Next Return 1 End Function bei mir (350 MHz) hats für die primzahlen bis 1 mio 2551 ms gedauert und mit Tritons version hats 4775 ms gedauert. |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
Lord_Vader |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aha.
Bei tritos zeigt er um die 700000 primzahlen an, bei dir um die 300000. Will ja nix sagen vielleicht liegts ja daran (du pfeife) ![]() |
||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
hab grad rausgefunden weswegen das nicht so tut wies soll jetzt gibts auch gleich viele raus wie bei triton und is bei mir immer noch schneller.
hier ist die neue version davon: Code: [AUSKLAPPEN] ; Original by Triton modded by DAK
Graphics 400,300,32,2 AppTitle("Primzahlen") zahl=3 k = 1 endzahl=1000000 ;7368809 Global j=Sqr(endzahl) Global a1,i,t2 Dim pz(j) Print "Ermittle Primzahlen von "+Zahl+" bis "+endzahl+"." Print "..." DeleteFile("primzahlen"+txt+".txt") dat=WriteFile("primzahlen"+txt+".txt") CloseFile dat dat=OpenFile("primzahlen"+txt+".txt") WriteLine dat,"2" t1=MilliSecs() For z1=3 To j Step 2 If primzahlalt(z1) = 1 Then pz(a1)=z1 a1=a1+1 WriteLine dat,z1 If wechsel = 0 Then wechsel = 1 If wechsel = 1 Then wechsel = 0 End If Next While Not KeyDown(1) If primzahl(zahl) = 1 Then WriteLine dat,Str(zahl) i=i+1 End If ;If i Mod 10000 = 0 Then Print zahl If zahl>endzahl Then t2=MilliSecs()-t1 WriteLine dat, i+a1+" Primzahlen gefunden." WriteLine dat,"Es hat "+t2+" ms gedauert." t1=MilliSecs() CloseFile dat stats() End If If wechsel = 2 Then wechsel = 0 If wechsel = 1 Then zahl=6 * k - 1 k = k + 1 wechsel = 2 EndIf If wechsel = 0 Then zahl=6 * k - 1 wechsel = 1 EndIf Wend ;--- Function stats() Print i+a1+" Primzahlen gefunden." Print "Es hat "+t2+" ms gedauert." Print "" Print "Bye." WaitKey End End Function ;--- Function primzahl(zahl) For i2=0 To a1-1 Step 1 If (zahl Mod pz(i2) = 0) Then Return 0 Next Return 1 End Function ;--- Function primzahlalt(zahl) For teiler=3 To Sqr(zahl) Step 2 If (zahl Mod teiler = 0) Then Return 0 Next Return 1 End Function |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
E. Urbachehemals "Basicprogger" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: For z1=3 To j Step 2 ;2->ungerade Zahlen, 1,3,7,9: Ich glaube, die Stepwidth lässt sich berechnen, dann in Repeat-Schleife->und vielleicht noch mehr speed: habs selber noch nicht versucht, man müsste nen Algorithmus dafür finden If primzahlalt(z1) = 1 Then pz(a1)=z1 a1=a1+1 WriteLine dat,z1 If wechsel = 0 Then wechsel = 1 If wechsel = 1 Then wechsel = 0 End If Next |
||
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik |
![]() |
Ctuchik |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bin grad im Urlaub und schaue aus dem Internetcafe rein, kann also keine Codes testen, aber wie schon in dem Thread zu dem Triton verlinkt hat>
Setzt mal BlitzBasic: [AUSKLAPPEN] zahl = j vor die While/Schleife in Tritons Code und testet obs dann schneller ist und trotzdem noch korrket. Vielen Dank ![]() MfG Ctuchik |
||
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle! Fraget euren Arzt oder Apotheker! |
![]() |
Lord_Vader |
![]() Antworten mit Zitat ![]() |
---|---|---|
Auf jeden fall hast du trotzdem nicht gleich viele raus wie triton du hast gut 100 mehr. Wenn die korrekt sind naja :\
Auf jeden fall dauert es bei mit mit Tritons code nur ca 20 ms länger und ich glaub triton seins is korrekt ;( |
||
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da kommt irgendwann auch 25 raus und das ist doch keine Primzahl, oder? | ||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
BlackTermi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
also um auszurechnen ob 25 ne primzahl ist brauch ich nicht mal 10% meines gehirns....
lässt sich durch 5 teilen... |
||
lettorTrepuS |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
wadim |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich habe mal ein Primzahlberechnungsprogramm gemacht das ziehmlich schnell ist.
bei 10000000 primzahlen ist es bei mir etwa 50% schneller als Tritons es benutzt keine langsame modulo-division, aber ich denke dass man es noch weiter optimieren kann. Code: [AUSKLAPPEN] ;;;;;;;;;;;;;;;;;;;;;;;;;; ;Primzahlen;;;;;;;;;;;;;;; ;;;;;;;;;;;;von;;Wadim;;;; ;AUGUST;;;;2005;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;; Const primzahlen=1000000 ;;;;;;;;;;;;;;;;;;;;;;;;;; Graphics 600,300,0,2 ;INIT Dim zahlen(primzahlen) file=WriteFile("primsx.txt") Print "Berechne Primzahlen von 2 bis "+primzahlen Flip 0 ;ZEIT vt=MilliSecs() For i=1 To primzahlen zahlen(i)=i Next count = 0 ;MAIN For i=2 To primzahlen If zahlen(i)=0 Then ;;nichts Else count=count+1 ;For a=i To primzahlen Step i ;;;aus C++: for(int a=i;a<primzahlen;a += i) a=i While a < primzahlen a = a + i If a > primzahlen Then ;nichts -schleife beenden Else zahlen(a)=0 EndIf Wend WriteLine file, i EndIf Next t=(MilliSecs()-vt) WriteLine file , "Insgesamt "+count+" Primzahlen gefunden innerhalb von "+(t)+" milliSekunden" Print "Insgesamt "+count+" Primzahlen gefunden innerhalb von "+t+" milliSekunden" WaitKey End |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group