← Все вопросы
Как проверить, что число — точный квадрат (4, 9, 16...)?
5
Надо понять, является ли число точным квадратом, то есть равно ли оно какому-то целому в квадрате (16 = 4², да; 17 — нет). Через корень делаю, но из-за дробей иногда ошибается. Как надёжно?
2 ответа
10
✓ Принятый ответ — помог автору
Идея: берём корень, округляем до целого и проверяем, что его квадрат равен исходному числу. Округление защищает от погрешности дробных чисел:
import math
n = 16
root = round(math.sqrt(n))
if root * root == n:
print('точный квадрат')
else:
print('нет')
Для 16 sqrt даст ~4.0, округлим до 4, и 4*4 == 16 — верно. Для 17 корень ~4.12, округлится до 4, 4*4 == 16 != 17 — значит нет.
4
В Python 3.8+ есть точная целочисленная функция math.isqrt(n) — целая часть корня без всяких дробей. С ней совсем надёжно: math.isqrt(n) ** 2 == n. Рекомендую её, если версия позволяет.
Ваш ответ
Войдите, чтобы ответить на вопрос.