Задания
Версия для печати и копирования в MS Word
Тип 5 № 58472
i

Ал­го­ритм по­лу­ча­ет на вход на­ту­раль­ное число N и стро­ит по нему новое число R сле­ду­ю­щим об­ра­зом:

1.  Стро­ит­ся дво­ич­ная за­пись числа N.

2.  Если число N де­лит­ся на 5, в конец дво­ич­ной за­пи­си до­бав­ля­ет­ся дво­ич­ный код числа 5, в про­тив­ном слу­чае в конец дво­ич­ной за­пи­си до­бав­ля­ет­ся 1.

3.  Если по­лу­чен­ное на преды­ду­щем шаге число де­лит­ся на 7, в конец дво­ич­ной за­пи­си до­бав­ля­ет­ся дво­ич­ный код числа 7, в про­тив­ном слу­чае в конец дво­ич­ной за­пи­си до­бав­ля­ет­ся 1.

4.  Ре­зуль­та­том ра­бо­ты ал­го­рит­ма ста­но­вит­ся де­ся­тич­ная за­пись по­лу­чен­но­го числа R.

 

При­мер. Дано число N  =  10. Ал­го­ритм ра­бо­та­ет сле­ду­ю­щим об­ра­зом:

1.  Стро­им дво­ич­ную за­пись: 1010  =  10102.

2.  Число 10 де­лит­ся на 5, до­бав­ля­ем к дво­ич­ной за­пи­си код числа 5, по­лу­ча­ем 10101012  =  8510.

3.  Число 85 не де­лит­ся на 7, до­бав­ля­ем к дво­ич­ной за­пи­си цифру 1. По­лу­ча­ем 101010112  =  17110.

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]))


Аналоги к заданию № 58472: 58513 Все