2017-08-01 5 views
2

Wie finden Sie Primzahlen? Primzahlen sind die Zahlen, die größer als eins sind und nur durch sie und eins teilbar sind. Eine Möglichkeit, um zu bestimmen, ob eine Zahl eine Primzahl ist wie folgt:So finden Sie die Primzahl

-> wenn die Zahl < 2, dann Falsch zurückgeben

-> wenn die Nummer 2 ist, dann true zurück -> für jeden Wert von i, wobei i> = 2 und i < Nummer: , wenn die Zahl von i teilbar ist, dann Falsch zurückgeben -> True

Mein aktueller Code zurück:

def is_prime(number): 
    if number == 2: 
     return True 
    elif number < 2: 
     return False 
    else: 
     for i in range(2, number): 
      if number % i == 0: 
       return False 
      else: 
       return True 
def main(): 
    print(is_prmie(1)) 
    print(is_prmie(4)) 
    print(is_prmie(7)) 

Einige Syntaxprobleme, die ich nicht lösen kann. Kann jemand bitte helfen? Danke TA!

+0

Kleine Optimierung, können Sie bei 'sqrt (Zahl) stoppen' (stellen Sie sicher, dass es vorab zu berechnen, da es ein langsamer Vorgang ist). Zum Beispiel: '100 = 50 * 2', aber du hättest schon' 2' überprüft, lange bevor du zu '50' kommst. – sircodesalot

Antwort

1

Ich schlage vor, die folgenden teilbar sein:

from math import sqrt 

def is_prime(x): 
    if x < 2: 
    return False 

    if x % 2 == 0: 
    return x == 2 

    i = 3 
    while i <= sqrt(x): 
    if x % i == 0: 
     return False 
    i += 2 

    return True 

Dinge zu beachten:

  • Die einzige gerade Primzahl ist 2. Die Schleife ist auf ungerade Zahlen beschränkt.
  • Nur Faktoren bis einschließlich der Quadratwurzel müssen getestet werden. Denn wenn x = y * z und y ≥ sqrt (x), dann ist z ≤ sqrt (x)
  • Nur eine Return-Anweisung in der Schleife. Sie können eine Nicht-Primzahl vorzeitig beenden, aber Sie müssen die Schleife abschließen, um sicherzugehen, dass die Zahl Prim ist.
0

Sie müssen die main() anrufen und is_prime() richtig schreiben.

def is_prime(number): 
if number == 2: 
    return True 
elif number < 2: 
    return False 
else: 
    for i in range(2, number): 
     if number % i == 0: 
      return False 
     else: 
      return True 
def main(): 
    print(is_prime(1)) 
    print(is_prime(4)) 
    print(is_prime(7)) 
main() 
+0

Bitte stimme nach, wenn das Problem gelöst wurde :) –

0

Die Schreibweise von is_prime zum Zeitpunkt des Methodenaufrufs ist falsch. Außerdem haben Sie am Ende keinen Aufruf an die Methode main.

Kleine Verbesserung:

for i in range(2, number): 

diese Linie kann wie folgt sein, wie wir brauchen nicht Teilbarkeit der Zahl nach der Hälfte zu überprüfen:

for i in range(2, (number/2)): 

z.B. 24 Überprüfung prime oder nicht, brauchen wir nur bis 12 zu überprüfen, weil sie nie von Nummer größer als 12