我尝试了一些基本的优化,以减少一般euler problem #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的因子)。
答案 0 :(得分: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