Алгоритм получает на вход натуральное число N и строит по нему новое число R следующим образом:
1. Строится двоичная запись числа N.
2. Если число N делится
3. Если полученное на предыдущем шаге число делится
4. Результатом работы алгоритма становится десятичная запись полученного числа R.
Пример. Дано число N = 10. Алгоритм работает следующим образом:
1. Строим двоичную запись: 1010 = 10102.
2. Число 10 делится
3. Число 85 не делится
4. Результат работы алгоритма R = 171.
Определите наибольшее возможное значение N, для которого в результате работы алгоритма получается R < 1 728 404.
Приведём решение на языке Python.
for n in range(1000000,1,-1):
r = bin(n)[2:]
if n % 5 == 0:
r += bin(5)[2:]
else:
r += '1'
if int(r,2) % 7 == 0:
r += bin(7)[2:]
else:
r += '1'
if int(r,2) < 1728404:
print(n)
break
Ответ: 432 098.
Приведём решение Юрия Красильникова на языке Python.
def f(n):
r = n * 8 + 5 if n % 5 == 0 else n * 2 + 1
return r * 8 + 7 if r % 7 == 0 else r * 2 + 1
print(max([n for n in range(1,1000000) if f(n) < 1728404]))

