2016-04-14 12 views
0

Ich bin neu in der Programmierung und ich habe ein Problem im Internet gefunden, um die 1000. Primzahl zu zeigen. Aber das Problem ist, dass mein Code aber ich habe ein paar Probleme damit.Zählen Primzahlen

count=0 
prime=[] 
n=2 

while count != 1000: 
    if n == 2 or n == 3 or n == 5 or n == 7 or n == 11: 
     prime.append(n) 
     n=n+1 
     count=count+1 
    elif n%2 == 0 or n%3 == 0 or n%5 == 0 or n%7 == 0 or n%11 == 0: 
     n=n+1 
    else: 
     prime.append(n) 
     n=n+1 
     count=count+1 

print(prime[999]) 

Das Problem kommt, wenn ich eine Zahl wie 403. Nach dem Code habe ich schrieb es eine Primzahl ist, aber es ist eigentlich nicht, weil es sich um 13 geteilt werden kann und 31

ich kam ein Lösung, aber ich weiß nicht, wie es geht und ob es eine bessere Lösung gibt. Wenn Sie mir helfen, bitte versuchen Sie, meinen Code zu bewahren, bitte geben Sie mir nicht völlig neuen Code.

Meine Lösungen sind:

elif n%prime[:]==0 
    n=n+1 

Also im Grunde, was ich versuche zu einem der anderen Primzahlen zu tun versucht, die Nummer 403, zum Beispiel zu teilen, die ich früher aufgenommen habe. Aber aus irgendeinem Grund gibt mir dieser Code einen Fehler. Ich möchte dem Programm mitteilen, dass es "auf jede Nummer in der Liste verteilt ist". Danke für die Hilfe :)

+0

Was '% Primzahl sein [:] == 0 'tun soll? Meinst du "für i in prime: wenn n% i == 0"? –

+0

Ja, aber ich habe versucht, es ohne den Befehl "for" zu machen –

Antwort

0

Sie können "alle" verwenden.

In [15]: prime = [2, 3, 5, 7, 11] 

In [16]: n = 15 

In [17]: any(n%p == 0 for p in prime) 
Out[17]: True 

In [18]: n = 17 

In [19]: any(n%p == 0 for p in prime) 
Out[19]: False 

In [20]: n = 19 

In [21]: any(n%p == 0 for p in prime) 
Out[21]: False 

Grundsätzlich wird es Ihnen sagen, wenn die angegebene Zahl durch "any" der Nummer in der Liste teilbar ist.

0

Es gibt mehrere Algorithmen zum Zählen von Primzahlen, was Sie zuerst brauchen, ist zuerst, wie Sie entscheiden, ob eine Funktion isPrime (n) wahr oder falsch zurückgibt und wenn Sie diese Funktion benötigen, ist prime (n) unter o (n). Es gibt mehrere Ansatz, dies zu tun, hier sind die Möglichkeiten:

def isPrime(n): 
    i = 2; 

    while i*i < n: 
     if n % i == 0: 
      return false 
     i = i + 1 
    return true; 

diese werden Ihnen prime geben oder nicht mit Komplexität O (n^1/2), sollte für Sie ausreichend sein, danach die nächste Sache Sie tun müssen, ist:

counter = 0 
number = 2 
while counter < 1000: 
    if isPrime(number): 
     counter = counter + 1; 
    number = number + 1 
print number; 

ich diesen Code noch haben versucht, aber das Konzept sollte es