5 номер. Преобразование записей чисел
Преобразование двоичной записи
Алгоритм получает на вход натуральное число N и строит по нему новое число R следующим образом:
1. Строится двоичная запись числа N.
2. Если число N делится на 5, в конец двоичной записи добавляется двоичный код числа 5, в противном случае в конец двоичной записи добавляется 1.
3. Если полученное на предыдущем шаге число делится на 7, в конец двоичной записи добавляется двоичный код числа 7, в противном случае в конец двоичной записи добавляется 1.
4. Результатом работы алгоритма становится десятичная запись полученного числа R.
Пример. Дано число N = 10. Алгоритм работает следующим образом:
1. Строим двоичную запись: 10₁₀ = 1010₂.
2. Число 10 делится на 5, добавляем к двоичной записи код числа 5, получаем 1010101₂ = 85₁₀.
3. Число 85 не делится на 7, добавляем к двоичной записи цифру 1. Получаем 10101011₂ = 171₁₀.
4. Результат работы алгоритма R = 171.
Определите наибольшее возможное значение N, для которого в результате работы алгоритма получается R < 1 855 663.
Подсказка
Сначала выполните все шаги для одного N, сохраняя строку после каждого изменения. Затем уточните, что требуется выбрать: N, R или количество значений.
Решение
Искомая величина: Определите наибольшее возможное значение N, для которого в результате работы алгоритма получается R < 1 855 663.
Разделите решение на два действия: для одного входного числа точно воспроизведите алгоритм, затем отберите результаты по условию задачи. Храните запись числа строкой; основание используемой системы счисления — 2.
После завершения всех преобразований получите числовой результат: R = int(s, 2). Ограничения на величину R проверяйте численно: лексикографический порядок строк не совпадает с порядком чисел.
Отбирайте ту величину, о которой спрашивается в последнем предложении: исходное число и результат алгоритма нельзя подменять друг другом. Для наименьшего входа рассматривайте допустимые N по возрастанию; для наибольшего проверяйте весь обоснованный диапазон.
Строгое «больше» означает >, а «не меньше» — >=; аналогично различайте верхние границы. Диапазон перебора определяйте из ограничений и изменения длины записи, а не произвольной константой. Пример из условия помогает проверить отдельный проход алгоритма.
Ответ: 463913.