Maison >développement back-end >Tutoriel Python >Comment déterminer avec précision si un nombre est un carré parfait ?

Comment déterminer avec précision si un nombre est un carré parfait ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-08 19:54:021084parcourir

How to Accurately Determine if a Number is a Perfect Square?

Trouver des carrés parfaits : une méthode complète

Déterminer si un nombre est un carré parfait peut sembler simple, mais s'appuyer sur des opérations à virgule flottante peut s'avérer peu fiable. Pour plus de précision, il est crucial d'utiliser des approches basées sur des nombres entiers comme celle présentée ci-dessous.

L'algorithme exploite la méthode babylonienne de calcul de racine carrée. Il estime de manière itérative la racine carrée en calculant la moyenne de l'estimation actuelle et le nombre divisé par cette estimation.

def is_square(apositiveint):
  x = apositiveint // 2
  seen = set([x])
  while x * x != apositiveint:
    x = (x + (apositiveint // x)) // 2
    if x in seen: return False
    seen.add(x)
  return True

Il est prouvé que cette méthode converge pour tout entier positif et s'arrête si le nombre n'est pas parfait. carré, car la boucle se perpétuerait indéfiniment.

Voici un exemple :

for i in range(110, 130):
   print i, is_square(i)

Sortie :

110 False
111 False
112 False
113 False
114 False
115 False
116 False
117 False
118 False
119 False
120 True
121 True
122 False
123 False
124 False
125 True
126 False
127 False
128 False
129 True

Comme vu ci-dessus, l'algorithme identifie correctement les carrés parfaits, tels que 120 et 125, tout en excluant les carrés non parfaits comme 111 et 122.

Pour les grands entiers, les inexactitudes en virgule flottante peuvent devenir importantes, conduisant potentiellement à des erreurs résultats. Pour garantir la précision, il est conseillé d'éviter d'utiliser des opérations à virgule flottante pour cette tâche.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn