mirror of
https://github.com/Fare-spec/cours.git
synced 2025-12-07 10:50:36 +00:00
76 lines
2.1 KiB
Python
76 lines
2.1 KiB
Python
### 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
|