Задача #3357

Задания 19–21

Уровень ЕГЭ

Общее условие для 19–21

(О. Лысенков) Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один или три камня, либо увеличить количество камней в куче в два раза. У каждого игрока есть неограниченное количество камней, чтобы делать ходы.
Игра завершается в тот момент, когда количество камней в куче становится простым числом. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу, количество камней в которой является простым числом. В начальный момент в куче было S камней; 1 ≤ S ≤ 100, S не является простым числом.
Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

Вопрос для задания 20

Для игры, описанной в задании 19, найдите два наибольших значения S, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
− Петя не может выиграть за один ход;
− Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

Ответ
Войдите, чтобы история ответов и статистика сохранялись.
Решение Нажми, чтобы открыть

Ответ

84
92

Общий разбор связки

from math import *
def is_simple(n):
if n == 1:
return False
for i in range(2,int(n ** 0.5) + 1):
if n % i == 0:
return False
return True


def f(a,m):
if is_simple(a): return m % 2 == 0
if m == 0: return 0
h = [f(a * 2,m - 1),f(a + 3,m - 1),f(a + 1,m - 1)]
return any(h) if m % 2 else all(h)


print('19)', min([i for i in range(1,101) if f(i,2) and not(f(i,0))])) #так как число изначально
#может оказаться простым и тогда победа на 0-м ходе зачтётся как победа на 2-м, то пишем not(f(i,0))
print('20)', *[i for i in range(1,101) if f(i,3) and (not f(i,1))][-2:])
print('21)', max([i for i in range(1,101) if f(i,4) and (not f(i,2)) and not(f(i,0))]))

Решение для задания 20

Быстрый переход
Перейти к задаче