2017-05-19 25 views
0

Ich habe eine Vielzahl älterer Beiträge zu diesem Thema durchgesehen, und sie haben mich auf die eine oder andere Weise verwirrt. Also fange ich gleich am Anfang an.PYTHON: Eine n-te Primzahl finden

Das Problem ist # 7 auf Projekt Euler und ich bin ein ziemlich neuer Programmierer, der versucht, sich durch die Probleme zu arbeiten. # 7 ist wie folgt.

Durch Auflisten der ersten sechs Primzahlen: 2, 3, 5, 7, 11 und 13, können wir sehen, dass die sechste Primzahl 13 ist. Was ist die 10.001 Primzahl?

Mein Problem ist wie folgt. Ich habe ein klares Verständnis davon, was Primzahlen sind und wie sie funktionieren. Der sudo-Code, den ich für dieses Problem schreiben würde, ist dies:

For n in range(3,n) #where n is some very large value. 
if n%i ==0 for i in range(2,n-1) 
return False 
if n%i == 0 for i == n 
return True 

Aber ich glaube, meinen Mangel an Wissen, wenn es um Python kommt, ist mir zu behindern bei der Suche, was ich will.

In den meisten anderen Lösungen, die ich gesehen habe, begrenzen sie n auf etwas wie 125000 und ich habe ehrlich gesagt keine Ahnung, woher sie diese Zahl herkommen.

Das andere Problem ist, ich weiß nicht, wie man richtig durch einen Bereich sucht und eine Liste von Werten erstellt, die diese Beziehung in einer Weise erfüllt, dass ich dann den Max-Wert in der Liste überprüfen kann. Die Sache, die für mich am sinnvollsten wäre, wäre, jede neue Primzahl an eine Liste anzuhängen und dann einfach den Maximalwert zu nehmen, aber ich bin mir sicher, dass es einen besseren und schnelleren Weg gibt, dies zu tun. Wenn Sie antworten werden, fügen Sie bitte eine gesunde Portion Erklärung hinzu, ohne in Python Technobabble zu springen, denken Sie daran, ich bin ein Anfänger in der Programmierung.

Ich weiß, dass die typische Art, wie Leute mit Fragen wie diesem umgehen, darin besteht, den Fragesteller dazu zu bringen, die richtige Antwort zu finden, ich will das nicht. Ich möchte, dass jemand mir eine Lösung zeigt und dann Schritt für Schritt durch die Erklärung geht, was jeder Teil des Codes tut, damit ich nicht nur lernen kann, das Problem zu lösen, sondern auch eine bessere Intuition dafür, wie Python funktioniert.

Danke.

+0

Es gibt eine 'gmpy2' Modul, mit dem Sie auf einen Blick könnten, gibt es eine' next_prime() 'Methode, die Sie den n-te Primzahl bekommen nutzen können. Oder Sie können diese Antwort beziehen [http://stackoverflow.com/questions/2068372/fastest-way-to-list-all-primes-below- n) – Pavan

+0

@Pavan Ich denke, er will es ohne Verwendung der richtigen Paket, die die Prime bereits behandeln –

+0

@PhungDuyPhong hinzugefügt einen Link, wo verschiedene Algorithmen für das gleiche sind vorhanden und miteinander verglichen. – Pavan

Antwort

1

Diese Aufgabe fordert Sie grundsätzlich auf, 10001 Primzahlen zu sammeln. Beginnen Sie mit dem Erstellen einer Liste von Primzahlen, und wenn Sie die 10001. Nummer erreichen, zeigen Sie sie an.

Hier ist ein Beispielcode:

def is_prime(n): 
    for i in range(3, n): 
     if n % i == 0: 
      return False 
    return True 

primes = [] # list of primes 
x = 10001 # go to the nth-number 
n = 2 # start at number 2 

while len(primes) != x+1: # is n-th number on the list? +1 is because list is zero-based 
    if is_prime(n): 
     primes.append(n) # add prime to the list 
    n+=1 # increment n to check the next number 

# print the last item in the list - the n-th number 
print(primes[-1]) 
+0

Sie können die Prüfung der ist Prime auf 'N/2' nur reduzieren, ich denke, es wäre schneller –

+0

Woher wissen Sie das? Ich sehe Leute online sagen, dass Sie bis zu sqrt (n) überprüfen können, aber ich bin mir ziemlich sicher, warum. –