On a besoin d'une classe qui permet de calculer avec des irrationnels quadratiques ici : $\frac{a + b\sqrt{c}}{d}$.
class quad_irrational:
def __init__(self, a=0, b=1, c=0, d=1):
self.a = a
self.b = b
self.c = c
self.d = d
def inverse(self):
a, b, c, d = self.a, self.b, self.c, self.d
return quad_irrational(d*a, -d*b, c, a**2 - b**2 * c)
def __repr__(self):
return "({0} + {1} sqrt({2}))/({3})".format(self.a, self.b, self.c, self.d)
x = quad_irrational(0, 1, 23, 1)
x.inverse()
(0 + -1 sqrt(23))/(-23)
x.inverse().inverse()
(0 + -23 sqrt(23))/(-23)
import math
class continued_frac:
def __init__(self, initial_sqrt):
self.initial_sqrt = initial_sqrt
self.int_part = int(math.sqrt(initial_sqrt))
self.frac_part = math.sqrt(initial_sqrt) - self.int_part
self.expansion = []
self.remainder = (
def compute_expansion_step(self):
cf = continued_frac(23)
cf.frac_part
0.7958315233127191
cf.int_part
4
int(3).__div__(4)
0
int.__invert__