2016-06-06 4 views
1

Ich sehe, dass es viele verschiedene Möglichkeiten gibt, Primzahlen zu generieren. Mein Code ist sehr lang und überflüssig, aber ich weiß, dass er definitiv komprimiert und mit einigen Änderungen weniger repetitiv gemacht werden kann und ich hoffte, dass ich in die richtige Richtung zeigen könnte. Im Wesentlichen möchte ich den Prozess automatisieren, der in meinem Code angezeigt wird, so dass er für jeden Bereich und alle Primzahlen funktionieren kann.Schreiben eines Algorithmus zum Generieren von Primzahlen in Python innerhalb eines gegebenen Bereichs

Hier ist mein Code:

def primes(): 
    multiplesList1 = [] 
    multiplesList2 = [] 
    multiplesList3 = [] 
    multiplesList4 = [] 
    multiplesList5 = [] 
    multiplesList6 = [] 
    multiplesList7 = [] 
    multiplesList8 = [] 
    multiplesList9 = [] 
    for i in range(2,1000): 
     if i % 2 != 0 or i == 2: 
      multiplesList1.append(i) 
    for j in multiplesList1: 
     if j % 3 != 0 or j == 3: 
      multiplesList2.append(j) 
    for x in multiplesList2: 
     if x % 5 != 0 or x == 5: 
      multiplesList3.append(x) 
    for y in multiplesList3: 
     if y % 11 != 0 or y == 11: 
      multiplesList4.append(y) 
    for z in multiplesList4: 
     if z % 13 != 0 or z == 13: 
      multiplesList5.append(z) 
    for a in multiplesList5: 
     if a % 17 != 0 or a == 17: 
      multiplesList6.append(a) 
    for b in multiplesList6: 
     if b % 19 != 0 or b == 19: 
      multiplesList7.append(b) 
    for c in multiplesList7: 
     if c % 23 != 0 or c == 23: 
      multiplesList8.append(c) 
    for d in multiplesList8: 
     if d % 29 != 0 or d == 29: 
      multiplesList9.append(d) 
    return multiplesList9 

print(primes()) 
+1

Ich empfehle googeln "Sieb von Eratosthenes". –

+0

werfen Sie einen Blick hier: https://rosettacode.org/wiki/Sieve_of_Eratosthenes#Python –

Antwort

0

Alles, was Sie tun müssen, ist eine zweite for-Schleife mit einer Reichweite bis zur vorherigen Nummer erstellen und jedes Modul überprüfen. Wenn 0 das Ergebnis ist, dann darf es nicht prim sein.

if __name__ == "__main__": 
    prime = True 
    for i in range(2, 1000): 
     for x in range(2, i): 
      if i % x == 0: 
       prime = False 
     if prime: 
      print(i) 
     prime = True 
+0

Die Verwendung einer Primzahl Sieb ist wahrscheinlich viel schneller, wenn die Geschwindigkeit ein Anliegen ist – Stefan

+0

@duncan Vielen Dank für diesen Beitrag, behob das Problem. Ich war kurz davor, aber du hast mir geholfen, dorthin zu kommen! – Chris95

+0

@duncan Ich frage mich nur, was ist der Zweck der ersten Zeile in Ihrem Code? (wenn __name__ == "__main__":) – Chris95