Skip to content

Instantly share code, notes, and snippets.

@CTimmerman
Created November 24, 2020 07:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save CTimmerman/2f42879d8076ac01ddfffce9e6663d0f to your computer and use it in GitHub Desktop.
Save CTimmerman/2f42879d8076ac01ddfffce9e6663d0f to your computer and use it in GitHub Desktop.
Euler's pentagonal formula
"""Euler's pentagonal formula, by Cees Timmerman, 2020-11-23.
https://www.youtube.com/watch?v=iJ8pnCO0nTY"""
import math
def get_lookback_index(x: int):
i = 0
a = 0
b = 1
steps = [1]
while i < x-1:
i += 1
if i % 2:
a += 1
steps.append(a)
else:
b += 2
steps.append(b)
return sum(steps)
def get_lookback_indexes(x: int):
results = []
i = 1
while True:
index = get_lookback_index(i)
if index >= x: break
results.append(index)
i += 1
return results
def euler_pentagonal_number(x: int):
"""
>>> euler_pentagonal_number(0)
1
>>> euler_pentagonal_number(1)
1
>>> euler_pentagonal_number(666)
11956824258286445517629485
"""
result = 1
numbers = [1, 1]
for i in range(3, x+2):
result = 0
looks = get_lookback_indexes(i)
#print(f"{i}th: {looks}")
for count, look in enumerate(looks):
factor = numbers[-look]
if count % 4 > 1: factor *= -1
#print("factor", factor)
result += factor
#print(f"Number {i-1} is {result:}")
numbers.append(result)
return result
print("{:,}".format(euler_pentagonal_number(666)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment