some new things, mostly not working or finished

This commit is contained in:
2025-11-08 18:16:10 +01:00
parent 5792bfbd9a
commit 795fb42900
30 changed files with 4789 additions and 1 deletions

41
fib/fib.py Normal file
View File

@@ -0,0 +1,41 @@
# tiny class to hold a 2x2 matrix
class Matrix2x2:
def __init__(self, m00, m01, m10, m11):
self.m00 = m00
self.m01 = m01
self.m10 = m10
self.m11 = m11
# multiply two 2x2 matrices
def multiply(a, b):
return Matrix2x2(
a.m00 * b.m00 + a.m01 * b.m10, # top-left
a.m00 * b.m01 + a.m01 * b.m11, # top-right
a.m10 * b.m00 + a.m11 * b.m10, # bottom-left
a.m10 * b.m01 + a.m11 * b.m11 # bottom-right
)
# raise a matrix to the power n using binary exponentiation
def matrix_pow(base, n):
result = Matrix2x2(1, 0, 0, 1) # start with identity matrix
while n > 0:
if n % 2 == 1: # if n is odd, multiply once
result = multiply(result, base)
base = multiply(base, base) # square the base
n //= 2 # integer division
return result
# get nth fibonacci number using matrix exponentiation
def fibonacci_matrix(n):
if n == 0:
return 0 # edge case
base = Matrix2x2(1, 1, 1, 0) # Fibonacci Q-matrix
result = matrix_pow(base, n - 1)
return result.m00 # top-left is F(n)
# print first n fibonacci numbers
if __name__ == "__main__":
n = 50
for i in range(n):
print(fibonacci_matrix(i), end=" ")
print()