Вам данно N-ое количество цифр и нужно проверить какие из них простые

пример ввода:
3      #цифры
11
1
4
пример вывода:
YES
NO
NO
def prostChislo(a):
   b = 2
   while a % b != 0:
       b += 1
   return b == a
n = int(input())
for range1 in range(n):
   a = int(input())
   if a == 1:
       print("NO")
   elif prostChislo(a) is True:
       print("YES")
   else:
       print("NO")

это мой код но когда запускаешь на hackerrank выдаёт ошибку что слишком долго


Ответы (3 шт):

Автор решения: Danis

Перебирать все числа не надо, можно перебирать от2 до sqrt(a)

def prostChislo(a):
   for b in range(2, int(a ** .5) + 1):
       if a % b == 0:
           return False
   return True
→ Ссылка
Автор решения: Zhihar

судя по вашему примеру - сначала идет ввод, а затем вывод

в вашем примере вывод идет после каждого ввода, т.е. так:

3      #цифры
11
YES
1
NO
4
NO

так и должно быть? или результат надо накопить и потом выдать одной портянкой?

→ Ссылка
Автор решения: n1tr0xs
  1. Ваш вывод не соответствует вашему примеру.
  2. Прогонять для проверки на простоту нужно не все числа подряд, а от 2 до sqrt(n)+1, но есть хитрость, которая позволяет сделать прогон от 3 до sqrt(n)+1 с шагом 2.
def is_prime(n):
    if n == 1: # если число == 1 - не простое
        return False
    if n == 2: # если число == 2 - простое
        return True
    if not n % 2: # если число делится на 2 - не простое
        return False
    for i in range(3, int(n**.5)+1, 2):
        if not n%i:
            return False
    return True

nums = [int(input()) for i in range(int(input()))]
for num in nums:
    print('YES' if is_prime(num) else 'NO')
→ Ссылка