Primzahlenberechner

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

Gandalf13

Betreff: Primzahlenberechner

BeitragDi, Feb 17, 2004 15:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hat jemand von euch eine idee wie ich die überprüfung für einen primzahlenberechner proggen könnte?! Laughing
ihr wisst eh teilt oder teilt nicht
oder hat bb2d eine eigen funktion? Laughing so wie bei Pi 8)
hoffe auf viele code !! Smile

danke im voraus! Very Happy
Jeder hat das Recht dumm zu sein.
Einige missbrauchen diese Recht leider ständig!
 

Edlothiol

BeitragDi, Feb 17, 2004 15:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Primzahl = True
For i = 2 To x / 2
  If (x Mod i) = 0 Then Primzahl = False
Next

Ist natürlich nicht optimiert oder so. Einfach alle Zahlen getestet.

Ctuchik

BeitragDi, Feb 17, 2004 17:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Primzahl = True
If (zahl Mod 2) = 0
  Primzahl = False
Else
  i = 3
  Repeat
    If (zahl Mod i) = 0
      Primzahl = False
      Goto Ende
    End if
    i = i + 2
  Until i * i > zahl
End If

.Ende


War nur so ein Gedanke! Etwas komplizierter, aber muss weniger Zahlen testen! Ich frage mich ob es dann schneller ist! Wenn überhaupt dann wahrscheinlich nur minimal!

mfG Ctuchik
 

Edlothiol

BeitragDi, Feb 17, 2004 20:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist schneller. Ich habs getestet Rolling Eyes Mein Code: ca. 18 Millisekunden für 1000 Zahlen, deiner: 1 Millisekunde Wink
Man muss aber auch noch auf 1 testen.
 

Apocalyptic

BeitragDi, Feb 17, 2004 20:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Edlothiol hat Folgendes geschrieben:
Man muss aber auch noch auf 1 testen.


Wie jetzt? Du willst überprüfen, ob eine Zahl durch eins teilbar ist? Welche ist das denn nicht?
Suum cuique

[ www.ffs-net.de.vu ] [ Raycaster ]
 

Edlothiol

BeitragDi, Feb 17, 2004 20:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Arghl. Nein, ich will nicht überprüfen, ob die Zahl durch eins teilbar ist, sondern ob sie = 1 ist. Dann wäre sie nämlich trotzdem keine Primzahl.

Triton

BeitragDi, Feb 17, 2004 20:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Prinzipiell sollten schonmal alle Zahlen die hinten eine 0/2/4/5/6/8/9 haben rausgeschmissen werden, dann gehts noch deutlich schneller.

(wobei 2/5 selber Primzahlen sind, also müsste man das noch mit berücksichtigen).

BladeRunner

Moderator

BeitragDi, Feb 17, 2004 20:56
Antworten mit Zitat
Benutzer-Profile anzeigen
19 ? *hüstel*
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

TheShadow

Moderator

BeitragDi, Feb 17, 2004 21:57
Antworten mit Zitat
Benutzer-Profile anzeigen
tja triton, wahr wohl nix
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Blatolo

BeitragDi, Feb 17, 2004 21:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Bis auf die 9 wars aber richtig da 0 2 4 6 8 vielfaches von 2 wären und 5 vielfaches von 5.

Holzchopf

Meisterpacker

BeitragDi, Feb 17, 2004 23:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Man braucht sowieso das Vielfache von Primzahlen nicht zu prüfen.
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Triton

BeitragDi, Feb 17, 2004 23:09
Antworten mit Zitat
Benutzer-Profile anzeigen
hm, bis zum posten des Beitrags war ich mir vollkommen sicher, dass jede Zahl mit ner 9 durch 3 Teilbar ist ^^

mag daran liegen, dass mir nur so geistreiche Zahlen wie 999 und 99 eingefallen sind um das zu untermauern..


oops Rolling Eyes

Ctuchik

BeitragMi, Feb 18, 2004 0:28
Antworten mit Zitat
Benutzer-Profile anzeigen
generell muss man nur Teilbarkeit durch Primzahlen feststellen, dumm nur dass man diese gerade erst sucht Very Happy
Ich glaube meine Methode ist schon recht effektiv!
Ich denke gerade noch über ne andere Lösung nach, aber ich glaube nicht dass sie schneller ist, höchstens bei sehr großen Zahlen!

mfG Ctuchik

simi

BeitragMi, Feb 18, 2004 20:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
es gibt da noch so einen Algorytmus der irgendwas mit ... - Sieb heisst der geht so
Code: [AUSKLAPPEN]

Dim Primz(1000)
For x = 2 to 1000
  if PrimZ(x) = 0 then
    Print x
    For y = x to 1000 step x
      if y>1000 then  exit
      PrimZ(y)=1
    next
  end if
next
Waitkey
end

Ist aber blöd bei sehr hohen Zahlen

littleRabbit

BeitragMi, Feb 18, 2004 21:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Sieb des Pythargoras oder weiß Gott wie der hieß/geschrieben wird. Wink
 

Absoluter Beginner

BeitragDo, Feb 19, 2004 0:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Sieb des Eratosthenes Wink
(Pythagoras war der mit dem rechtwinkligen Dreieck)


und Algorithmus schreibt man mit i Rolling Eyes
Error Inside!
 

Gast

BeitragDo, Feb 19, 2004 14:48
Antworten mit Zitat
Hi, der Code von Simi scheint mir nicht so recht zu laufen (Step Value must be constant).

Meine Idee:
Code: [AUSKLAPPEN]

A= 10000                     ;Zu überprüfender Zahlenraum
Dim IstPrim (A)    
For I=1 To A
   IstPrim (I)=1               ; alle Zahlen vorläufig prim setzen
Next
Wurzel=Ceil(Sqr(A))             ; Höchste Prpüfzahl festlegen
For I=2 To Wurzel
   If IstPrim(I)=1             ; Falls noch nicht als nichtprim markiert überprüfen
       MaxMulti= Ceil (A/I)      ; Höchsten Multiplikator z mit z*I = A wählen
      For J=2 To MaxMulti         ; Vielfache als nichtprim markieren
         IstPrim(J*I)=0
      Next
   EndIf
Next
For I=2 To A                  ; Primzahlen ausgeben
   If IstPrim(I)=1 Print I
Next;
WaitKey


Hat den Vorteil, dass nur nicht bereits markierte Zahlen überhaupt überprüft werden.

Ciao

Andreas

Ctuchik

BeitragDo, Feb 19, 2004 19:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Für eine Liste aller Primzahlen ist das hier wohl ideal:
Code: [AUSKLAPPEN]

Graphics 350,850,0,2

Print "Working..."

Dim Primzahlen(100000)
Const range = 1000000
Const pause = False
Global max_prims = 0
Global prints = 0
Global starttime = MilliSecs()
Primzahlen(0) = 2

For z = 3 To range
If pause = True And prints > 63
Print "Press a key..."
WaitKey()
prints = 0
End If
If IsPrimZahl(z)
max_prims = max_prims + 1
Primzahlen(max_prims) = z
Print z
prints = prints + 1
End If
Next
Print "Benötigte Zeit: " + Str(MilliSecs()-starttime) + " Millisekunden"
Print "Program has ended ... Press a key..."
WaitKey()
End

Function IsPrimZahl(zahl%)
a=0
Repeat
If (zahl Mod Primzahlen(a)) = 0
Return False
End If
a = a + 1
Until Primzahlen(a)*Primzahlen(a) > zahl Or a > max_prims
Return True
End Function

man beachte: Wenn mehr als 100000 Primzahlen berechnet werden ist der Array voll!

mfG Ctuchik
  • Zuletzt bearbeitet von Ctuchik am Do, Feb 19, 2004 23:43, insgesamt einmal bearbeitet
 

IonPainter

BeitragDo, Feb 19, 2004 20:17
Antworten mit Zitat
Benutzer-Profile anzeigen
hab mal simi's code korrigiert

Code: [AUSKLAPPEN]

Const Zahlen = 1000000

Dim Primz(Zahlen)
For x = 2 To Zahlen
  If PrimZ(x) = 0 Then
   
   Print x
    For y = x To Zahlen
      y = y + x
      If y>Zahlen Then  Exit
      PrimZ(y)=1
    Next
  End If
Next
WaitKey
End


weiss aber nicht was daran lahm sein soll ausser die print funktion, die eine million zahlen haut der bei mir in ca 20 secs durch...

Ctuchik

BeitragDo, Feb 19, 2004 23:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Dieser Code liefert massig Zahlen die definitiv KEINE Primzahlen sind!
Ich hab meinen Code nochmal überarbeitet, er wird jetzt bei Zahlen bis 1000000 nicht mehr viel langsamer!

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group