Python

Напишите код к задаче python

def is_prime(a):
~~if a % 2 == 0 or a <= 1: return a == 2
~~i = 3
~~while i * i <= a:
~~~~if a % i == 0: return False
~~~~i += 2
~~return True

def check(a):
~~a = list(map(int, str(a)))
~~return sum([(v[0] - v[1]) * (v[1] - v[2]) < 0 for v in zip(a, a[1:], a[2:])]) >= len(a) - 2

a, b = map(int, input().split())
print(*[i for i in range(a, b + 1) if is_prime(i) and check(i)])
ПЛ
Павел Лутохин
68 405
Лучший ответ
Олег Ников Здорово ускорится, если поменять местами check(i) и is_prime(i)
Николай Венцель проходит только часть тестов ((( на 3 тесте (при чем входные данные не показаны уже ошибка)
start, stop = map(int, input().split())
if start % 2 == 0: start += 1

###
def is_camel(k):
    k = str(k)

    switch = k[0] < k[1]

    if (k[0] == k[1]): return False

    for i in range(1, len(k) - 1):
        if ( (k[i] < k[i + 1]) == switch or k[i] == k[i + 1] ):
            return False
        switch = not switch

    return True

def is_prime(k):
    sqrt = int(k ** 0.5)

    for i in range(3, sqrt + 1):
        if (k % i == 0):
            return False

return True

###
numbers = []

for k in range(start, stop + 1, 2):
    if (is_camel(k) and is_prime(k)):
        numbers.append(k)

print(numbers)
_____________

is_camel(k) and is_prime(k) — Не случайно поставлены в этом порядке. Первая проверка тратит меньше итераций, отсеит значительную часть чисел, и вторая функция даже не станет выполняться.
CC
Chita Chita
62 360
Николай Венцель у вас тест тоже проходит только первые 2 а на 3 ошибку выдает (у Андрея просто неверный ответ) но у вас за решение засчитало 8/10 баллов, у Андрея 7/10
Ержан Жилкубаев кажется я понял в чем ошибка если запихнуть тест от 0 до 20 то выдает число 11, а не должно его выдавать
как это исправить?