2013-09-26 51 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