### D'après WIKIPEDIA def racine_raphson(number: float, precision: float) -> float: assert number > 0, "La racine du nombre n'est pas réelle." y = (number / 3) + 1 diff = precision + 1 while diff > precision: y_next = (y + number / y) / 2.0 diff = abs(y_next - y) y = y_next return y if __name__ == "__main__": print(racine_raphson(36, 0.000000000000001) ** 2 == 36) def dichotomie( liste: list[any], element: any, start: int = 0, end: int = None, bypass_sorting: bool = False, ) -> int: """Recherche la partie entière de la racine carrée d'un nombre en utilisant une recherche dichotomique. Args: liste (list[any]): Liste de nombres simulée pour la recherche. element (any): Le nombre dont on cherche la racine carrée entière. start (int, optional): Index de départ. Defaults to 0. end (int, optional): Index de fin. Defaults to None. bypass_sorting (bool, optional): Ignoré dans cette version. Returns: int: La partie entière de la racine carrée. """ if end is None: end = len(liste) - 1 if start > end: return end # Retourne la partie entière trouvée. middle = (start + end) // 2 squared = middle * middle if squared == element: return middle elif squared < element: return dichotomie(liste, element, middle + 1, end, bypass_sorting=True) else: return dichotomie(liste, element, start, middle - 1, bypass_sorting=True) def racine_dich(number: int) -> int: """ Calcul de la partie entière de la racine carrée d'un nombre entier. Args: number (int): Nombre dont on cherche la racine carrée. Returns: int: La partie entière de la racine carrée. """ assert number >= 0, "Le nombre doit être positif ou nul." liste = [i for i in range(number // 2 + 2)] # Simule une "liste" pour la dichotomie return dichotomie(liste, number) if __name__ == "__main__": print(racine_dich(36)) # Retourne 6 print(racine_dich(20)) # Retourne 4 print(racine_dich(0)) # Retourne 0 print(racine_dich(1)) # Retourne 1