Совершенные квадраты и целые числа: числовое исследование
Определение того, является ли данное число идеальным квадратом, на первый взгляд может показаться простым. Однако при рассмотрении больших целых чисел и сложности вычислений с плавающей запятой проблема становится более очевидной.
Целочисленные подходы
При отсутствии острой необходимости для скорости целочисленные подходы предлагают надежные средства проверки идеальных квадратов. Черпая вдохновение из вавилонского алгоритма вычисления квадратного корня, эти методы основаны на идее о том, что итеративное уточнение начального приближения в конечном итоге приводит к точности.
В частности, следующая функция Python, is_square(), использует это стратегия:
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
Этот подход начинается с начального приближения x, определяемого как половина входного apositiveint. Затем он вступает в итерационный процесс, в котором x изменяется до тех пор, пока он не сойдется к истинному квадратному корню, apositiveint.
Чтобы гарантировать сходимость, текущее приближение x сохраняется в видимом наборе для проверки любых предыдущих вхождений. . Если обнаружено повторение, это указывает на отсутствие сходимости, и функция возвращает False. В противном случае он возвращает True, когда x * x равно apositiveint.
Пример проверки
Чтобы проиллюстрировать эффективность этого метода, рассмотрим следующий пример:
for i in range(110, 130): print(i, is_square(i))
Этот цикл перебирает диапазон целых чисел от 110 до 129, проверяя каждое число на предмет идеального квадрата. Вывод подтверждает точность функции: false выводится для несовершенных квадратов, а true для идеальных квадратов.
Соображения с плавающей запятой
Необходимо отметить что, хотя вычисления с плавающей запятой могут обеспечить очевидное решение, они создают риск ошибок округления, которые могут привести к неверным выводам. Поскольку умножение и возведение в степень целых чисел являются точными операциями, целочисленный подход обеспечивает точность, особенно для больших чисел.
Библиотека Gmpy
Если скорость является приоритетом, gmpy библиотека предлагает высокоэффективную реализацию целочисленных функций. В частности, его метод is_square() обеспечивает существенный прирост производительности:
import gmpy gmpy.is_square(x**7) gmpy.is_square(x**7 1)
Эти операции, выполняемые с очень большими целыми числами, иллюстрируют исключительные возможности библиотеки gmpy. Однако его использование может вызвать опасения по поводу сложности выполнения и использования памяти для приложений с интенсивными вычислениями.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3