, . :
T(2n) = T(n+1)*(2*T(n+2) - T(n+1)) + T(n)*(2*T(n+3) - 2*T(n+2) - 2*T(n+1) - T(n))
T(2n+1) = T(n)^2 + T(n+2)^2 + T(n+1)*(2*T(n+3) - 2*T(n+2) - T(n+1))
T(2n+2) = T(n+1)*(2*T(n) + T(n+1)) + T(n+2)*(2*T(n+3) - T(n+2))
T(2n+3) = T(n+1)^2 + T(n+3)^2 + T(n+2)*(2*T(n) + 2*T(n+1) + T(n+2))
" ". Python, :
def tetranacci_by_doubling(n):
if n >= 0:
a, b, c, d = 0, 0, 0, 1
else:
a, b, c, d = 1, 0, 0, 0
for i in reversed(range(1, abs(n).bit_length())):
w = b*(2*c - b) + a*(2*(d - c - b) - a)
x = a*a + c*c + b*(2*(d - c) - b)
y = b*(2*a + b) + c*(2*d - c)
z = b*b + d*d + c*(2*(a + b) + c)
a, b, c, d = w, x, y, z
if (n >> i) & 1 == 1:
a, b, c, d = b, c, d, a + b + c + d
if n & 1 == 0:
return b*(2*c - b) + a*(2*(d - c - b) - a)
else:
return a*a + c*c + b*(2*(d - c) - b)
def tetranacci(n):
a, b, c, d = 0, 0, 0, 1
n -= 3
if n >= 0:
for _ in range(+n):
a, b, c, d = b, c, d, a + b + c + d
else:
for _ in range(-n):
a, b, c, d = d - c - b - a, a, b, c
return d
print(all(tetranacci_by_doubling(n) == tetranacci(n) for n in range(-1000, 1001)))
T(2n-3),T(2n-2),T(2n-1),T(2n) T(n-3),T(n-2),T(n-1),T(n), n, .
Update
- , ,
n . . - , , - , . ~ 40% -50%
n (>= 10^6)! .
- . , . , T(n) (, , ) , n , , 2^n ~= 2^0 + 2^1 + ... + 2^(n-1). Fibonacci/Lucas ~ 40% - , Fibonacci/etc. 64- M, , .