Primzahlen generieren

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Josef Sniatecki
Beiträge: 657
Registriert: 02.06.2008 21:29
Kontaktdaten:

Primzahlen generieren

Beitrag 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.
PB 4.61 | Windows Vista - 32Bit
Homepage

"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Primzahlen generieren

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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 
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

warum sind eigentlich alle so heiß auf primzahlen....
das is irgendwie so'n sport-mäßiges dingens für nerds, oder?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Beitrag 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...
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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?
Windows 10 Pro, 64-Bit / Outtakes | Derek
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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:
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Gibts bei dir eigentlich auch mal Posts ohne das :freak: symbol?
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

DarkDragon sollte das direkt in seine Signatur mitaufnehmen :mrgreen:
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Antworten