Schnellster Primzahlenrechner ever

Übersicht BlitzBasic Codearchiv

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

DAK

Betreff: Schnellster Primzahlenrechner ever

BeitragFr, Aug 26, 2005 0:22
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Aug 26, 2005 1:13
Antworten mit Zitat
Benutzer-Profile anzeigen
1 ist keine Primzahl , dafür aber 7 und 13 uvm!
Error Inside!

Commander-Tobi

BeitragFr, Aug 26, 2005 1:29
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Aug 26, 2005 1:38
Antworten mit Zitat
Benutzer-Profile anzeigen
bestimmt hat DAK noch ein "Print p" danach vergessen
trotzdem funktioniert das nicht richtig...
Error Inside!

Hip Teen

BeitragFr, Aug 26, 2005 2:28
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger"
 

lettorTrepuS

BeitragFr, Aug 26, 2005 3:43
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

DAK

BeitragFr, Aug 26, 2005 11:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Aug 26, 2005 13:49
Antworten mit Zitat
Benutzer-Profile anzeigen
dann kannst du deiner mathelehrering ja jetzt den beweis liefern das dem nicht so ist Wink

mfg stf
Denken hilft!

SoNenTyp

BeitragFr, Aug 26, 2005 16:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Aug 26, 2005 19:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Abgesehen davon, dass dieses Programm falsche Ergebnisse liefert, gilt es das zu schlagen:

Triton hat Folgendes geschrieben:

BlitzBasic: [AUSKLAPPEN]

;** Juni 2005
;** by Triton
;** www.silizium-net.de
;** High-Speed-Version
Graphics 400,300,32,2
AppTitle(\"Primzahlen\")
zahl=3
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
zahl=zahl+2
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


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

BeitragFr, Aug 26, 2005 21:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Aug 27, 2005 0:06
Antworten mit Zitat
Benutzer-Profile anzeigen
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) Wink

DAK

BeitragSa, Aug 27, 2005 0:23
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Urbach

ehemals "Basicprogger"

BeitragSa, Aug 27, 2005 13:26
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Aug 27, 2005 18:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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 
If zahl Mod 2 = 0 Then zahl = zahl + 1

vor die While/Schleife in Tritons Code und testet obs dann schneller ist und trotzdem noch korrket.

Vielen Dank Very Happy

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

BeitragSo, Aug 28, 2005 12:56
Antworten mit Zitat
Benutzer-Profile anzeigen
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 ;(

Kabelbinder

Sieger des WM-Contest 2006

BeitragMo, Aug 29, 2005 16:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Da kommt irgendwann auch 25 raus und das ist doch keine Primzahl, oder?
<Wing Avenger Download> ◊◊◊ <Macrophage Download>
 

BlackTermi

BeitragMo, Aug 29, 2005 17:11
Antworten mit Zitat
Benutzer-Profile anzeigen
also um auszurechnen ob 25 ne primzahl ist brauch ich nicht mal 10% meines gehirns....

lässt sich durch 5 teilen...
 

lettorTrepuS

BeitragMo, Aug 29, 2005 17:43
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.
 

wadim

BeitragMo, Aug 29, 2005 19:53
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group