2013-09-26 53 views
0

我尝试了一些基本的优化,以减少操作为广大euler problem #4数量:广义项目欧拉#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的因子)。

+1

我假设你已经看到了这个答案:http://stackoverflow.com/a/12674588/895932所以你想要改变你的代码或什么? – justhalf

+0

是的 - 我正在做这些练习来升级我的python-fu,并寻找关于如何使我的代码更快的反馈 – blueberryfields

+1

Aside:如果您正在寻找注释以改进工作代码,则应该查看[codereview ](http://codereview.stackexchange.com)。 – DSM

回答

1

一些小的优化:你可以摆脱早期x -loop,并通过交换了一下周围(未经测试)的检查,减少调用的次数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