Seite 1 von 2

Primzahlen generieren

Verfasst: 02.06.2008 22:34
von Josef Sniatecki
Ich habe hier einen kruzen Code für Leuts die schnell
Primzahlen sehen wollen:

Code: Alles auswählen

#Min=2 ;Von 2 bis ...
#Max=100

Global Teiler.l
Global MaxTeiler.l
Global Zahl.l

For Zahl=#Min To #Max
  For Teiler=2 To Zahl
    If Zahl%(Teiler)=0 And Zahl<>Teiler
      Debug Str(Zahl)+" ist teilbar durch "+Str(Teiler)
      Break
    ElseIf Teiler=Zahl
      Debug Str(Zahl)+" ist eine Primzahl."
      Break
    EndIf
  Next
Next
Würde mich über weitere Suchverfahren oder Kommentare freuen.

Re: Primzahlen generieren

Verfasst: 02.06.2008 22:40
von ts-soft
Josef Sniatecki hat geschrieben: Würde mich über weitere Suchverfahren oder Kommentare freuen.
Die Boardsuche ist ein gutes Suchverfahren :mrgreen:
http://www.purebasic.fr/german/viewtopi ... 035#124035

Verfasst: 02.06.2008 23:01
von STARGÅTE
cool, da habe ich ja sogar was gepostet ^^

wie dort auch schon gesagt minimiert das Wurzelziehen die Rechenzeit enorm !

Das hier würde bei dir schon mehrere Sekunden dauern

Code: Alles auswählen

#Min=1000000 ;Von 2 bis ... 
#Max=1000100 

Global Teiler.l 
Global MaxTeiler.l 
Global Zahl.l 

For Zahl=#Min To #Max 
  Z = Int(Sqr(Zahl))
  For Teiler=2 To Z
    If Zahl%(Teiler)=0 And Zahl<>Teiler 
;      Debug Str(Zahl)+" ist teilbar durch "+Str(Teiler) 
      Break 
    ElseIf Teiler=Z 
      Debug Str(Zahl)+" ist eine Primzahl." 
      Break 
    EndIf 
  Next 
Next 

Verfasst: 03.06.2008 00:39
von Kaeru Gaman
warum sind eigentlich alle so heiß auf primzahlen....
das is irgendwie so'n sport-mäßiges dingens für nerds, oder?

Verfasst: 03.06.2008 10:25
von gnasen
Es gibt verschiedene Gründe für die Ermittlung von Primzahlen:

a) weil man es kann
b) weil man es schneller kann als andere
c) zB zur Verschlüsslung nutzen

Wenn ich mir die Liste anschaue, muss ich allerdings zugeben, dass das noch nicht das Optimum an Gründen ist...

Verfasst: 03.06.2008 10:55
von STARGÅTE
das hier ist der Grund:
Wiki hat geschrieben: Es ist jedoch kein Verfahren bekannt, das effizient beliebig große Primzahlen generiert, so dass es stets eine größte bekannte Primzahl gab, seitdem sich die Menschen mit Primzahlen befassen. Derzeit ist es 2^32.582.657 − 1, eine Zahl mit 9.808.358 (dezimalen) Stellen, gefunden am 4. September 2006 von einem Professorenteam der Central Missouri State University im Rahmen von George Woltmans GIMPS-Projekt (Great Internet Mersenne Prime Search) zur Suche von Mersenne-Primzahlen. Für den ersten Primzahlbeweis einer Zahl mit mehr als 10 Millionen Dezimalstellen hat die Electronic Frontier Foundation einen Preis von 100.000 US-Dollar ausgeschrieben.
Ne im ernst, die meisten hier machen das zum Spaß, denn verwenden kann man die teile nur in höheren Dimensionen, die aber mit unseren Mitteln nicht erreicht werden.

Verfasst: 03.06.2008 13:05
von Fluid Byte
gnasen hat geschrieben:a) weil man es kann
b) weil man es schneller kann als andere
=
Kaeru Gaman hat geschrieben:das is irgendwie so'n sport-mäßiges dingens für nerds, oder?

Verfasst: 03.06.2008 13:20
von DarkDragon

Code: Alles auswählen

; Sieb des Eratosthenes

#Max = 100000

Global Dim primzahlen.l(#Max)

; 1 fällt weg, wir beginnen auch erst bei 2
primzahlen(0) = 1
primzahlen(1) = 1

; Ermitteln der Primzahlen
For k = 2 To #Max
  If primzahlen(k) = 0
    
    ; Streiche alle 1..z * k Zahlen, da sie durch k geteilt werden können
    n = 2
    m = n * k
    While m <= #Max
      primzahlen(m) = 1
      
      n + 1
      m = n * k
    Wend
    
  EndIf
Next k

; Ausgeben der Primzahlen
For k = 2 To #Max
  If primzahlen(k) = 0
    Debug k
  EndIf
Next k
Alle Elemente des Arrays die nun 0 sind sind Primzahlen.

Sowas lernt man bei uns in Mathematik. :freak:

Verfasst: 03.06.2008 14:04
von Fluid Byte
Gibts bei dir eigentlich auch mal Posts ohne das :freak: symbol?

Verfasst: 03.06.2008 14:37
von ZeHa
DarkDragon sollte das direkt in seine Signatur mitaufnehmen :mrgreen: