0

我尝试了一些基本的优化,以减少一般欧拉问题 #4的操作次数:

def is_palindrome(num):
    return str(num) == str(num)[::-1]

def fn(n):
    max_palindrome = 1
    for x in range(n,1,-1):
        for y in range(n,x-1,-1):
            if is_palindrome(x*y) and x*y > max_palindrome:
                max_palindrome = x*y
            elif x * y < max_palindrome:
                break
    return max_palindrome

print fn(999)

我可以/如何进一步优化它吗?(假设它是一般解决方案,最多为 n 而不是最多 999)。

4

1 回答 1

1

一些小的优化:您可以在循环的早期中断并通过交换检查x来减少调用次数(未经测试):is_palindrome

def fn(n):
    max_palindrome = 1
    for x in range(n,1,-1):
        if x * n <= max_palindrome: # nothing bigger possible for remaining x
            break
        for y in range(n,x-1,-1):
            if x * y <= max_palindrome: #nothing bigger possible for current x
                break
            if is_palindrome(x*y):
                max_palindrome = x*y
    return max_palindrome
于 2013-09-26T09:56:55.720 回答