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

Обо­зна­чим через a%b оста­ток от де­ле­ния на­ту­раль­но­го числа a на на­ту­раль­ное число b, а через a//b  — целую часть от де­ле­ния a на b.

Функ­ция F(n), где n  — не­от­ри­ца­тель­ное целое число, за­да­на сле­ду­ю­щи­ми со­от­но­ше­ни­я­ми:

F(n)  =  0, если n  =  0;

F(n)  =  F(n//4) + n%4, если n > 0 и n%4 < 2;

F(n)  =  F(n//4) + n%4 − 1, если n%4 ≥ 2.

Най­ди­те ми­ни­маль­ное n, для ко­то­ро­го F(n)  =  27, а F(n + 1)  =  16.

Спрятать решение

Ре­ше­ние.

Функ­ция воз­вра­ща­ет сумму остат­ков де­ле­ния на 4. Чтобы по­лу­чи­лось 27, и число n было ми­ни­маль­ным, долж­но быть 13 остат­ков по 2 и один оста­ток по 1. Тогда число долж­но со­сто­ять из 3 и одной 2. Тогда сле­ду­ю­щее число, при при­бав­ле­нии 1 по­лу­чит­ся со­сто­я­щим из 3 и 0, при том, что нули пой­дут на ме­стах, где сто­я­ли 3 после 2.

При­ведём ре­ше­ние на языке Python.

from itertools import product

for i in product('23', repeat=14):

i=''.join(i)

if i.count('3')*2 + 1 ==27:

s = i[:i.find('2')] + '3' + '0' * len(i[i.find('2')+1:])

if (s.count('3')*2) == 16:

print(int(i,4))

 

 

Ответ: 268431359.

 

При­ведём ана­ли­ти­че­ское ре­ше­ние Да­ни­ла Лу­ки­ных.

Функ­ция воз­вра­ща­ет сумму цифр числа n в чет­ве­рич­ной си­сте­ме счис­ле­ния, но при этом цифры боль­ше двух(то есть 2 и 3) умень­ша­ет на еди­ни­цу.

Раз­берёмся в каком слу­чае сумма цифр числа в чет­ве­рич­ной си­сте­ме может умень­шить­ся на 11 еди­ниц, с учётом вы­че­та еди­ни­цы из двоек и троек.

За­ме­тим, что сумма цифр числа умень­ша­ет­ся при при­бав­ле­нии тогда и толь­ко тогда, когда в раз­ря­де к ко­то­ро­му её при­бав­ля­ют стоит цифра - мак­си­маль­ная в дан­ной си­сте­ме счис­ле­ния. В нашем слу­чае это цифра 3. Зна­чит, чтобы сумма цифр умень­ши­лась, из­на­чаль­ное число долж­но окан­чи­вать­ся трой­ка­ми.

Рас­смот­рим как ме­ня­ет­ся сумма цифр в за­ви­си­мо­сти от цифры, ко­то­рая будет сто­ять перед по­след­ней трой­кой:

103 (сумма 3) -> +1 -> 110 (сумма 2) -> Ноль перед трой­кой при­во­дит к до­бав­ле­нию еди­ни­цы в новую сумму

113 (сумма 4) -> +1 -> 120 (сумма 2) -> Еди­ни­ца перед трой­кой не ме­ня­ет новую сумму

123 (сумма 4) -> +1 -> 130 (сумма 3) -> Двой­ка перед трой­кой также при­во­дит к до­бав­ле­нию еди­ни­цы в новую сумму

С учётом этого, со­ста­вим такую по­сле­до­ва­тель­ность цифр, ко­то­рая будет мак­си­маль­на(сумму цифр для пер­во­го числа нужно «на­брать» как можно быст­рее) и при­ведёт к из­ме­не­нию ровно на -11

По­лу­чим 2333333 (сумма 13) -> +1 -> 3000000(сумма 2)

Зна­чит число долж­но окан­чи­вать­ся по­сле­до­ва­тель­но­стью 2333333, при этом остав­ша­я­ся часть числа долж­на «дать» сумму цифр 27 - 13 = 14. Самый быст­рый спо­соб на­брать такую сумму - трой­ка­ми, с учётом вы­че­та еди­ни­цы их по­на­до­бит­ся ровно 14 / 2 = 7

По­лу­ча­ем число 33333332333333

Про­ве­рим:

33333332333333 (сумма 27) -> +1 -> 33333333000000 (сумма 16)

Оста­лось пе­ре­ве­сти число в 10-рич­ную си­сте­му счис­ле­ния:

print(int('33333332333333', 4))


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