Вам данно 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
→ Ссылка
- Ваш вывод не соответствует вашему примеру.
- Прогонять для проверки на простоту нужно не все числа подряд, а от
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')