import math
import matplotlib.pyplot as plt
from functools import cache
def collatz_step(n: int) -> tuple[int, int]:
n = 3 * n + 1
v2 = (n & -n).bit_length() - 1
n >>= v2
return n, v2
def S_k(seed: int, k: int) -> int:
@cache
def get_2adic_valuation_list(seed: int) -> list[int]:
result = []
n = seed
while True:
n, v2 = collatz_step(n)
result.append(v2)
if n == 1:
break
# print("-" * 20)
# print(f"The longest E-streak length for N = {seed}")
# print(f"L = {max(result)}")
# print("-" * 20)
return result
valuations = get_2adic_valuation_list(seed)
k = min(k, len(valuations))
partial_sum = sum(valuations[:k-1])
return partial_sum
def Δ_k(n, k) -> float:
return S_k(n, k) - k*math.log2(3)
Click Run or press shift + ENTER to run code