为什么这个脚本在某些情况下会陷入无限循环?

2024-04-25 20:22:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我在写一个老的python脚本。在一些随机测试用例中运行它时,我注意到它在某些情况下会陷入一个无限循环中,而在其他情况下则不会。这个脚本适用于ProjectEulerProblem3(用于问题提示,所以从未注意到随机无限循环)。这适用于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()

Tags: the脚本byreturnifismainsys
1条回答
网友
1楼 · 发布于 2024-04-25 20:22:39

n/=d放在if之外(但在while之内)放在def 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

相关问题 更多 >