Метод Ньютона отлично работает на целых числах:
def isqrt(n):
x = n
y = (x + 1) // 2
while y < x:
x = y
y = (x + n // x) // 2
return x
Это возвращает наибольшее целое число x , для которого x * x не превосходит n . Если вы хотите проверить, является ли результат точно квадратным корнем, просто выполните умножение, чтобы проверить, является ли n идеальным квадратом.
Я обсуждаю этот алгоритм и три других алгоритма для вычисления квадратных корней, в моем блоге .