Исполнитель Редактор получает на вход строку цифр и преобразует её. Редактор может выполнять две команды, в обеих
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение
Если в строке нет вхождений
Б) нашлось (v).
Эта команда проверяет, встречается ли
Дана программа для Редактора:
НАЧАЛО
ПОКА НЕ нашлось (00)
заменить (02, 101)
заменить (11, 2)
заменить (012, 30)
заменить (010, 00)
КОНЕЦ ПОКА
КОНЕЦ
Известно, что исходная
После выполнения данной программы получилась
Приведем решение на языке Python.
def Div(n):
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return 0
return n > 1
def fn(u):
A = '0' + u + '0'
while '00' not in A:
A = A.replace('02','101',1).replace('11','2',1).replace('012','30',1).replace('010','00',1)
return 1 if Div(sum(map(int, list(A)))) else 0
print(min([i for i in range(41,100) if fn('1' * 40 + '2' * i)]))
Ответ: 44.
Приведем решение Сергея Калугина на языке Python.
from random import shuffle
p=[]
for i in range(41,500):
for j in range(100):
s = list('1'*40 + '2'*i)
shuffle(s)
a = '0' + ''.join(s) + '0'
while not '00' in a:
a = a.replace('02','101',1)
a = a.replace('11','2',1)
a = a.replace('012','30')
a = a.replace('010','00')
g=[]
b=sum([int(x) for x in a])
for d in range(1,int(b**0.5)+1):
if b%d==0:
g.append(d)
if d!=(b//d):
g.append(b//d)
if len(g)==2:
p.append(i)
print(min(p))
Приведем решение Ильи Андрианова на языке Python.
def prime(x):
if x == 1:
return False
for j in range(2, x):
if x % j == 0:
return False
return True
for n in range(41, 100):
s = '0' + '1' * 40 + '2' * n + '0'
while '00' not in s:
s = s.replace('02', '101', 1)
s = s.replace('11', '2', 1)
s = s.replace('012', '30', 1)
s = s.replace('010', '00', 1)
summa = sum([int(x) for x in s])
if prime(summa):
print(n)
break

