2016-04-10 6 views
1

Ich versuche, die break-Anweisung in einer Schleife zu verwenden. Ich versuche, eine Funktion zu erstellen, die die größte Primzahl weniger als eine bestimmte Nummer von Benutzer userInput findet. Hier ist mein Code:Wie verwende ich die Break-Klausel in diesem speziellen Fall

Ich muss wissen, wo die Break-Anweisung setzen, um das Programm zu stoppen, wenn ich die größte Primzahl gefunden habe. Wo soll ich es hinstellen und warum? Die Rücksprungfunktion funktioniert nicht. Hier ist, was passiert:

[2, 4, 5, 8, 10, 20, 25, 40, 50, 100, 125, 200, 250, 500, 1000] 
Your input 1000 is not prime 
[3, 9, 27, 37, 111, 333, 999] 
Your input 999 is not prime 
[2, 499, 998] 
Your input 998 is not prime 
[997] 
Your input 997 is prime. 
[2, 3, 4, 6, 12, 83, 166, 249, 332, 498, 996] 
Your input 996 is not prime 
[5, 199, 995] 
Your input 995 is not prime 
[2, 7, 14, 71, 142, 497, 994] 
Your input 994 is not prime 
[3, 331, 993] 
Your input 993 is not prime 
[2, 4, 8, 16, 31, 32, 62, 124, 248, 496, 992] 
Your input 992 is not prime 
[991] 
Your input 991 is prime. 
[2, 3, 5, 6, 9, 10, 11, 15, 18, 22, 30, 33, 45, 55, 66, 90, 99, 110,  165,  198, 330, 495, 990] 
Your input 990 is not prime 
+0

Meinst du die größte Primzahl weniger als 1000;)? – mwm314

Antwort

0

Versuchen zu verwenden xrange für bessere Leistung, wenn n zu groß ist:

from math import sqrt 


def is_prime(n): 
    if n in (2, 3): 
     return True 

    for i in xrange(2, int(sqrt(n)) + 1): 
     if n % i == 0: 
      return False 

    return True 


def find_largest_prime(n): 
    for i in xrange(n - 1, 1, -1): 
     if is_prime(i): 
      return i 

print(find_largest_prime(1000)) 
1

Ich denke, Sie besser von oben nach unten iterieren, um den größten Primfaktor zu bekommen. Gefällt mir:

primeFactor=1 
for aVar in range(userInput-1,1,-1): #loop from userInput-1 to 2 
    if userInput % aVar == 0: 
     primeFactor=aVar 
     break; 

print "The largest prime factor is "+str(primeFactor). 
1

Der Code, den Sie bisher haben, sieht ziemlich gut aus. Was die von Ihnen beschriebene Funktion tut, ist herauszufinden, ob eine gegebene (einzelne) ganze Zahl eine Primzahl ist. Was Sie jetzt tun müssen, starten Sie einfach von 1000 und gehen Sie runter, bis Sie eine Primzahl finden.

Ich denke, es ist sauberer, einfach True oder False zurückgeben, basierend darauf, ob die Nummer prim ist. Es ist auch ein wenig sauberer zu akzeptieren userInput als ein Argument für Ihre primäre Suche Funktion. So können Sie Ihre Funktion wie so sein ändern:

def primeFinder(userInput): 
    aVar = 2 # This is a possible factor 
    divisorList = [] # This is a factor list of userInout, the inputted number 
    while aVar <= userInput: # Checking until the variable cannot be a factor 
      if userInput % aVar == 0: # If userInput divided by the variable has a remainder of zero, it means it is a factor 
        divisorList.append(aVar) # Adding the factor to th factor list 
        aVar+=1 # Making the possible factor numeral one bigger to test again 
      else: 
        aVar +=1 # Making the possible factor numeral one bigger to test again 

    #print divisorList 
    if len(divisorList) > 1: # If there are more than one factor... 
      return False 
    else: 
      return True 

und dann die max zu finden (Pause verwenden, wie pro Ihre Frage) Sie können dies tun:

for num in range(1000, -1, -1): # count down from 1000 
    if primeFinder(num): 
     print "The largest prime under 1000 is:" 
     print num 
     break # Break out of loop after we've found largest result, as per question 
+0

Vielen Dank @mwm314. Dies wird sehr hilfreich sein. – nabu

Verwandte Themen