Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

андрей гаак Ученик (11), закрыт 4 года назад
Лучший ответ
Андрей Высший разум (483957) 4 года назад
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)])
Elepsis EclipseГений (67331) 4 года назад
Здорово ускорится, если поменять местами check(i) и is_prime(i)
Андрей Высший разум (483957) Elepsis Eclipse, В общем случае, да. Но надо смотреть на заданном диапазоне значений: check достаточно затратная функция, а is_prime для большинства чисел отработает очень быстро.
андрей гаакУченик (11) 4 года назад
проходит только часть тестов ((( на 3 тесте (при чем входные данные не показаны уже ошибка)
Андрей Высший разум (483957) андрей гаак, Немного поправил код. Но всё равно непонятно, почему не проходит.
Остальные ответы
Elepsis Eclipse Гений (67331) 4 года назад
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) — Не случайно поставлены в этом порядке. Первая проверка тратит меньше итераций, отсеит значительную часть чисел, и вторая функция даже не станет выполняться.
андрей гаакУченик (11) 4 года назад
у вас тест тоже проходит только первые 2 а на 3 ошибку выдает (у Андрея просто неверный ответ) но у вас за решение засчитало 8/10 баллов, у Андрея 7/10
Elepsis Eclipse Гений (67331) андрей гаак, Ну надо оптимизировать поиск простых чисел) Наверняка есть более быстрый способ, https://google.com#q=algorithm+to+find+prime+numbers+in+a+given+range
no nameУченик (30) 4 года назад
кажется я понял в чем ошибка если запихнуть тест от 0 до 20 то выдает число 11, а не должно его выдавать
как это исправить?
Elepsis Eclipse Гений (67331) no name, def is_camel(k):     if k < 10 return True # <— k = str(k) if len(k) == 2: return int(k) % 11 != 0 # <—
Похожие вопросы