Исполнитель Редактор получает на вход строку цифр и преобразует её. Редактор может выполнять две команды, в обеих
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение
Если в строке нет вхождений
Б) нашлось (v).
Эта команда проверяет, встречается ли
Дана программа для редактора:
НАЧАЛО
ПОКА нашлось (01) ИЛИ нашлось (02)
заменить (02, 1110)
заменить (01, 220)
КОНЕЦ ПОКА
КОНЕЦ
Известно, что исходная
Приведем решение на языке Python.
def Div(n):
for i in range(2, int(n**0.5)+1):
if n % i == 0:
return False
return True
mini = 1000000
for x in range(100):
for y in range(100):
s = '0' + '1'* x + '2'* y
if len(s) > 40:
while ('01' in s) or ('02' in s):
s = s.replace('02','1110',1)
s = s.replace('01','220',1)
if Div(s.count('1') + s.count('2') * 2):
mini=min(mini,x + 2*y)
print(mini)
Ответ: 42.
Приведем решение Бориса Савельева на языке Python.
from random import shuffle
h=[]
for i in range(40,60):
for k in range (0,i+1):
for j in range(0,50):
a = list('1'*(i-k)+'2'*k)
shuffle(a)
a = '0'+''.join(a)
c = sum([int(x) for x in a])
while ('01' in a) or ('02' in a):
a = a.replace('02','1110',1)
a = a.replace('01','220',1)
b = sum([int(x) for x in a])
p = []
for d in range(1,int(b**0.5)+1):
if b%d == 0:
p.append(d)
if d!=b//d:
p.append(b//d)
if len(p)==2:
h.append(c)
print(min(h))
Приведем решение Юрия Красильникова на языке Python.
def prostoe(n):
k = 2
while k**2 <= n :
if n%k == 0: return False
k += 1
return True
# x - количество единиц, y - количество двоек
a=[x + 2*y for x in range(100) for y in range(100) if x + y >= 40 and prostoe(4*x + 3*y)]
print(min(a))
Приведем решение Дмитрия Альцева на языке Python.
from itertools import product
def f(a):
a = int(a)
for x in range(2, int(a**0.5)+1):
if a % x == 0:
return False
else:
return True
e = product('12',repeat = 39)
for w in e:
w = list(w)
w.insert(0, '0')
g = ''.join(w)
while ('01' in g) or ('02' in g):
g = g.replace('02','1110',1)
g = g.replace('01','220',1)
if f(g):
h = map(int,g)
h = sum(h)
break
break
print(h)

