Как найти простое число в списке?
Как можно найти простыe числa в последовательности десятичных, целых, отрицательных чисел и слов? я попробовал решить это таким образом:
def isPrime(n):
if n % 2 == 0:
return n == 2
d = 3
while d * d <= n and n % d != 0:
d += 2
return d * d > n
print(isPrime(2.24))
и в данном примере выдает True, хотя 2.24 не простое число, то есть программа не рабочая и считает десятичные, отрицательные числа ВСЕ без исключения за простые
А также выдает ошибку, когда встречает слово типа str()
Ответы (1 шт):
проверить число на соответствие типу
intif isinstance(n, int) is False: return Falseполучить значение по модулю:
value = abs(n)искать делители от
2доmath.sqrt(n)если не найдены - число простое
т.е. код:
def isPrime(n):
if isinstance(n, int) is False:
return False
value = abs(n)
if value == 1:
return False
for i in range(2, int(value**0.5)):
if value % i == 0:
return False
return True
print(isPrime(2.24))
на счет отрицательных чисел - один момент с одной стороны конечно по определению простое число - это натуральное число строго большее 1, так что по идее надо проверку такую:
if value <= 1:
return False
и не париться с абсолютным значением, но иногда приходилось считать и отрицательные простыми числами (при использовании основной теоремы арифметики), вернее не считать, а использовать отрицательные как простые при разложении
хотя для не целых чисел я бы все таки выбрасывал исключение - логически наверное более правильно это
P.S.
кстати для простого числа есть и другое определение для которого код будет вот таким коротким, без проверки на 1 и отрицательные числа:
return len([i for i in range(1, n + 1) if n % i == 0]) == 2