Как найти простое число в списке?

Как можно найти просты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 шт):

Автор решения: Zhihar
  1. проверить число на соответствие типу int

     if isinstance(n, int) is False:
         return False
    
  2. получить значение по модулю:

     value = abs(n)
    
  3. искать делители от 2 до math.sqrt(n)

  4. если не найдены - число простое

т.е. код:

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
→ Ссылка