← Все вопросы

Как проверить, что число — точный квадрат (4, 9, 16...)?

Задан 16 месяцев назад924 просмотров2 ответа
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. Рекомендую её, если версия позволяет.

Ваш ответ

Войдите, чтобы ответить на вопрос.