Advertisement
doanhtu

Euler problem #44

Mar 6th, 2018
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.74 KB | None | 0 0
  1. import math
  2.  
  3. di = {}  # Memoization
  4.  
  5.  
  6. def cal_pentagonal(n):
  7.     '''Calculate the pentagonal number'''
  8.     if di.get(n):
  9.         return di[n]
  10.     else:
  11.         result = (n * (3 * n - 1)) / 2
  12.         di[n] = result
  13.     return result
  14.  
  15.  
  16. def is_pentagonal_number(x):
  17.     n = (math.sqrt(x * 24 + 1) + 1) / 6
  18.     return int(n) if n.is_integer() else False
  19.  
  20.  
  21. def main():
  22.     i = 1
  23.     while True:
  24.         i += 1
  25.         l = cal_pentagonal(i)
  26.         for k, v in di.items():
  27.             if is_pentagonal_number(sum((l, v))) and is_pentagonal_number(abs(l - v)):
  28.                 return(i, k)
  29.  
  30.  
  31. if __name__ == '__main__':
  32.     main()
  33.     # (2167, 1020)
  34.     # CPU times: user 1.71 s, sys: 0 ns, total: 1.71 s
  35.     # Wall time: 1.71 s
  36.     # ==>> 5482660
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement