2016-11-18 4 views
0

Wie ist die Zeile # 9 (wenn n + 1 == x) relevant für die Überprüfung, ob die Zahl prim ist?Brauchen Sie Hilfe, Zeile 9 der is_prime-Funktion zu verstehen; Gibt es einen einfacheren Weg für die Funktion?

Gibt es eine einfachere Möglichkeit, diese Funktion zu erstellen?

def is_prime(x): 
     if x == 2: 
      return True 
     elif x > 2: 
      for n in range(2, x): 
       if x % n == 0: 
        return False 
       else: 
        if n + 1 == x: 
         return True 
     else: 
      return False 
+0

'wenn n + 1 == x' prüft einfach, ob die aktuelle Zahl' n' um eins kleiner ist als die Zielnummer 'x'. Wenn Sie den ganzen Weg bis zu der Zahl kurz vor 'x' haben, ohne eine Zahl zu finden, die sich darin aufteilt (eigentlich nicht einmal so weit, es gibt viele Optimierungen), wie kann' x' etwas anderes als prim sein? – jonrsharpe

+0

@jonrsharpe es sei denn, das OP fragt, was ist der Sinn dieses Blocks? Ich nehme an, man könnte es einfach entfernen und "True" nach dem "for" direkt anstelle des ziemlich seltsamen Checks ... –

+0

@JonClements yeah, es ist kein großartiges Beispiel für die Kunst der Erstprüfung! – jonrsharpe

Antwort

1

Eine Primzahl ist eine Ganzzahl mit nur 1 und 'selbst' als Teiler. Hier ist eine ähnliche Lösung, die einfacher zu folgen ist. Wir verwenden einen Pandas DataFrame und die damit verbundene "Apply" -Funktion. Unterdrücken Sie die Zeile 'df drucken' und ändern Sie den Ausgang wie gewünscht. Viel Spaß

""" 
Created on Fri Nov 18 13:32:08 2016 
@author: Soya 
""" 

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
from pandas import DataFrame, Series 


def isprime(x): 
    vals = range(2,x/2) 
    df = DataFrame([vals]).T 
    df['1'] = df.apply(lambda y: x%y) 
    print df 
    print '' 
    if df['1'].prod() != 0: 
     print 'PRIME' 

isprime(17) 
    0 1 
0 2 1 
1 3 2 
2 4 1 
3 5 2 
4 6 5 
5 7 3 

PRIME 
Verwandte Themen