Как проверить является ли число квадратом python
Перейти к содержимому

Как проверить является ли число квадратом python

  • автор:

Python-сообщество

[RSS Feed]

  • Начало
  • » Центр помощи
  • » Функция, проверяющая является ли число квадратом целого числа

#1 Июнь 18, 2022 15:51:17

vladimir_vl_vlad Зарегистрирован: 2021-07-16 Сообщения: 27 Репутация: 0 Профиль Отправить e-mail

Функция, проверяющая является ли число квадратом целого числа

Написал функцию, но проблема в том, что при извлечении квадратного корня из числа, результат принимает вид “2.0” и проверка функцией isinstance показывает, что это число не целое. Не пойму как решить проблему с этой точкой?

def square_number(n): num = n sqrt = math.sqrt(num) print(type(sqrt)) if isinstance(sqrt, int): return True else: return False for number in range(1, 100): if square_number(number): print(f'Число является квадратом целого числа') else: print(f'Число не является квадратом целого числа') 

#2 Июнь 18, 2022 16:22:21

xam1816 Зарегистрирован: 2020-05-11 Сообщения: 1263 Репутация: 108 Профиль Отправить e-mail

Функция, проверяющая является ли число квадратом целого числа

if sqrt.is_integer(): return True else: return False 

Онлайн

#3 Июнь 19, 2022 07:53:33

doza_and От: Зарегистрирован: 2010-08-15 Сообщения: 4138 Репутация: 252 Профиль Отправить e-mail

Функция, проверяющая является ли число квадратом целого числа

Никак вы ее не решите. Результат извлечения корня это действительное число. В целое оно превратится только округлением. Но округлить можно любое действительное число.
Вам надо полностью менять алгоритм. воспользуйтесь тем что произведение целых целое число.

Определить, является ли заданное число квадратом простого числа

Author24 — интернет-сервис помощи студентам

Дано натуральное число N. Определить, является ли оно квадратом простого числа.
Формат выходных данных: Вывести в выходной файл Yes, если N — квадрат простого и No в обратном случае.

При загрузке кода в контестер выдаёт, что код справился в 16 из 20 случаев, то есть я что-то не учёл, не могу понять что.

1 2 3 4 5 6 7 8
import math with open('./input.txt', mode='r', encoding='utf_8') as num: x = math.sqrt(float(num.readline())) with open('./output.txt', mode='w', encoding='utf_8') as out: if x % 1 == 0: out.write('Yes') else: out.write('No')

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Дано натуральное число N. Определить, является ли оно квадратом простого числа
Во входном файле записано N (N≤100000). Вывести в выходной файл Yes, если N — квадрат простого и.

Определить является ли число квадратом простого числа
Всем привет, нужна помощь. Есть задача: Дано натуральное число N. Определить, является ли оно.

Проверить, является ли заданное число N квадратом целого числа
Имя входного файла: input.txt Имя выходного файла: output.txt Ограничение по времени: 0.2 секунды.

Проверить является ли заданное число квадратом целого числа
Проверьте,является ли заданное число N квадратом целого числа.Если заданное число является.

Определить, можно ли заданное число представить в виде куба простого числа
Дано натуральное число N. Определить, можно ли его представить в виде куба простого числа. Я.

Квадрат числа в математике и программировании

В этой статье мы поговорим, что такое квадрат числа, как его найти, а также каким образом производятся подобные вычисления в программировании.

Квадратом Х называют произведение 2-х множителей, каждый из которых равен Х.

Обозначение квадрата осуществляется с помощью степени, то есть Х² читается «Х в квадрате».

Если говорить еще более простым языком, то квадратом можно назвать число, которое умножено само на себя. Таким образом, мы можем написать простейшую формулу вычисления Х 2 :

Почему вообще такое выражение называют квадратом X? Дело в том, что именно данной формулой выражают площадь квадрата, сторона которого равна X, то есть геометрически это значение можно представить в виде площади квадрата, имеющего целочисленную сторону.

Вывод тут прост: для решение поставленной задачи следует требуемое значение взять в качестве множителя дважды, а потом вычислить произведение. Соответственно:

10 2 = 10 ⋅ 10 = 100

Это все элементарно и проходится в начальных классах средней школы. Решить такой пример в математике не проблема, а когда числовые значения выходят за рамки классической таблицы умножения, используют таблицу, ускоряющую расчеты.

Квадрат числа в математике и программировании

Также описанную математическую операцию можно рассматривать в контексте частного случая возведения в степень — ведь именно этим, по сути, она и является — возведением в степень 2.

Интерес представляет и числовая последовательность для квадратов целых чисел, являющихся неотрицательными (речь идет о последовательности A000290 в OEIS):

Квадрат числа в математике и программировании

Нельзя не сказать и про график y=x², где представлены целые значения x на отрезке 1-25.

Квадрат числа в математике и программировании

Квадратные числа

Если же говорить о натуральных числах из последовательности, упомянутой выше, в историческом контексте, то их всегда называли «квадратными». Квадратное числовое значение также называют полным либо точным квадратом, то есть целым значением, квадратный корень из которого можно извлечь нацело. К примеру, найти корень из 9 несложно (√9 = 3, т. к. 3 ⋅ 3 = 9). Не составляет проблем и вычислить корень из ста: (√100 = 10, ведь десять на десять равно сто).

Квадрат числа в математике и программировании

Легко понять, что сто — это квадратное число, так как его можно записать в виде 10 ⋅ 10 , плюс оно может быть представлено, как было сказано выше, в качестве площади квадрата со стороной, равной десяти. Таким образом, можно сделать вывод, что квадратное число включено в категорию классических фигурных чисел, то есть чисел, которые мы можем представить в виде геометрических фигур. Но в эту тему углубляться пока не будем.

А что в программировании?

Теперь давайте посмотрим, как все это работает в программировании. Для примера возьмем такой язык программирования, как Java (кстати, статья о том, как выполнять возведение в степень в Java, уже была).

Напишем простой метод по возведению любых числовых значений в квадрат:

public class Main

static int square(int x)

public static void main(String[] args)

Вы можете воспользоваться любым онлайн-компилятором для проверки этого кода. Также никто не мешает вписать любое число вместо десяти.

Квадрат числа в математике и программировании

Теперь воспользуемся простейшей программой для того, чтобы найти квадратный корень из 100:

public class Main

public static void main(String args[])

System.out.printf(«sqrt(%.2f) = %.2f%n», x, Math.sqrt(x));

Программа позволяет извлекать корень и из неквадратных значений. Ниже мы находим корень из 167:

Квадрат числа в математике и программировании

Да, в современную эпоху калькуляторов мало кто считает в уме. Вдобавок ко всему, сегодня даже не надо покупать настоящий калькулятор, так как калькулятор есть в любом мобильном телефоне, не говоря уже об онлайн-калькуляторах, коих существует огромное количество. Однако это не значит, что можно забыть азы алгебры. Не зря же великий русский ученый Михаил Ломоносов когда-то сказал:

Квадрат числа в математике и программировании

  • https://calculator888.ru/tablitsa-kvadratov;
  • http://www.for6cl.uznateshe.ru/kvadrat-chisla/;
  • https:/ru.wikipedia.org/.

Проверка, является ли число квадратом целого числа

Учитывая целое число, определите, является ли оно квадратным числом: В математике квадратное число или идеальный квадрат — это целое число, являющееся квадратом целого числа; другими словами, это произведение некоторого целого числа на самого себя. Примеры: -1: False, 0: True, 25 True | CodeWars Первый вариант решения проходит все тесты, но не проходит по времени:

if n ==0: return True else: for i in range(0,n): if i*i==n: return True else: return False 

Второй вариант не проходит 3 теста (на 3, 26 и секретный):

if n == 0: return True elif n 

Почему второй вариант не проходит данные тесты? Нужен вариант, который занимает мало времени (не попадёт под ошибку Execution Timed Out (12000 ms) , а также не используются библиотеки.

Отслеживать
задан 6 июл 2022 в 5:06
user507635 user507635
if n ** 0.5 == 1 Что вы тут проверяете? ��
6 июл 2022 в 5:11
Почему не просто что-нить типа if ( (int) (n ** 0.5) ) ** 2 == n ?
6 июл 2022 в 5:16

@Akina В питоне приводить к инту надо вызывая его как функцию, это не C# ) Но так то вопрос совершенно точный

6 июл 2022 в 5:17
Если у вас питон 3.8: return math.isqrt(n) ** 2 == n
6 июл 2022 в 6:05
(n**.5).is_integer()
6 июл 2022 в 6:26

4 ответа 4

Сортировка: Сброс на вариант по умолчанию

Простейшее быстрое решение для любого целого числа - двоичный поиск для получения целой части квадратного корня и прямая проверка что его квадрат равен исходному числу:

def isqrt(n): low = 0 high = n + 1 # + 1 to process 0, 1 properly while low < high - 1: mid = (low + high) // 2 if n < mid ** 2: high = mid else: low = mid return low def is_square(n): return n >= 0 and isqrt(n) ** 2 == n 

Отслеживать
ответ дан 6 июл 2022 в 11:57
Stanislav Volodarskiy Stanislav Volodarskiy
31.6k 3 3 золотых знака 19 19 серебряных знаков 55 55 бронзовых знаков

Нет смысла делать цикл до n . Это примерно 100500 лишних операций в среднем. Если n равно 10001, то получится 9900 лишних итераций, ведь квадрат любого числа больше 100 уже больше 10000, так зачем их проверять. Нужно делать цикл до квадратного корня из n

if n == 0: return True else: for i in range(n + 1): i2 = i * i # квадрат очередного числа if i2 == n: return True elif i2 > n: # если квадрат больше n, то нет смысла проверять дальше break return False # тут я убрал else и перенес строчку на уровень выше. Разницы никакой нет, а читаемость улучшилась. 

Прибавление 1 позволяет убрать первую проверку на 0. Так что мы эту проверку лучше заменим на проверку отрицательных чисел:

if n < 0: return False else: for i in range(n + 1): i2 = i * i if i2 == n: return True elif i2 >n: break return False 

Отслеживать
ответ дан 6 июл 2022 в 7:36
26.3k 7 7 золотых знаков 32 32 серебряных знака 48 48 бронзовых знаков
Прежде чем я воспользуюсь функцией math.sqrt(), мне придётся совершить import, что запрещено.
– user507635
6 июл 2022 в 7:44
Ну сорян, в условиях этого не написано ��‍♂️
6 июл 2022 в 7:48
Да вообще непонятно, зачем нужен цикл, если можно просто взять корень и проверить, что он целый )
6 июл 2022 в 7:51

Дописал, а так же попробовал брать 2 - n, время сократилось на 0.04ms в тесте, но этого недостаточно.

– user507635
6 июл 2022 в 7:54
исправил на без квадратного корня
6 июл 2022 в 8:21

Приведу, как ответ, так как часто сам сталкиваюсь с таким в задачах, а в комментариях именно этого способа не вижу. Хотя, если у вас случай именно для простого возведения в степень, то здесь вариант ниже не поможет. А вот в ряде схожих случаев будет просто необходим. Спасибо @CrazyElf за очень ценный комментарий к первому варианту ответа.

Использование оператора возведения в степень ** и деления по модулю % (а они часто используются вместе, при хэшировании, например) обычно затратно по времени при больших числах. В этом случае лучше использовать встроенную функцию pow .

К примеру, в случае возведения трехзначного числа в трехзначную степень ** ещё работает быстрее, чем pow , а вот для четырехзначных - уже наооброт. См. пример ниже сделанный на моем (далеко не самом новом) ноуте.

import timeit import math print(timeit.timeit ('pow(5362, 2445)')) # 142 секунды print(timeit.timeit ('5362**2445')) # 147 секунд print(timeit.timeit ('(526 ** 252) % 10145')) # 2.87 секунды print(timeit.timeit ('pow(526, 252, 10145)')) # 0.90 секунд 

Особо важно это при всевозможных множественных применениях возведения в степень в программе, включая рекурсивные и т.д., т.е. при большом числе таких операций.

Примечание: Есть ещё pow в библиотеке math , но с ним вообще что-то странное. Например, pow(53, 244) считается без ошибок, а math.pow(53, 244) выдает OverflowError: math range error . Так что его тут не рассматриваю.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *