簡體   English   中英

為什么在某些情況下此腳本陷入無限循環?

[英]Why does this script get stuck in infinite loop for some cases?

我正在重新制作舊的python腳本。 通過一些隨機測試用例運行它時,我注意到在某些情況下它會陷入無限循環,而在其他情況下則不會。 該腳本適用於項目Euler問題3(可用於提示問題,因此從未注意到隨機無限循環)。 這將適用於10、19、51、600851475143。它陷入152的無限循環中。

這是代碼:

import sys

def largestPrime(n):
    largest_prime = 0 # initialize largest prime
    d = 2 # set first value for factor evaluation

    while n > 1: # n will be divided by each factor later on
        while n % d == 0: # check if n is divisible by factor
            if d > largest_prime: # check if d is greater than largest_prime
                largest_prime = d # if so, set largest_prime = d
                n /= d # if so, can divide n by d to find remaining factors
        d += 1

    return largest_prime


def main():
    # Make a list of command line arguments, omitting the [0] element
    # which is the script itself.
    args = sys.argv[1:]
    if not args: #if list is empty; return message & exit
        print ("Usage: euler003.py 'n'")
        sys.exit(1)

    if len(args) > 1: #if list less than 1; return message & exit
        print ("You've entered too many arguments; Usage: euler001.py 'n'")
        sys.exit(1)

    largest = largestPrime(int(args[0]))
    print (largest)


# This is the standard boilerplate that calls the main() function.    
if __name__ == "__main__":
    main()

n/=d放置在def largestPrime(n): if (但在whiledef largestPrime(n):因為在您的代碼中,僅當d大於largest_prime時才執行n/=d ,這是錯誤的。 必須完成n/=d直到n % d == 0

while n % d == 0: 
    if d > largest_prime:
       largest_prime = d 
    n /= d 
d += 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM