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

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

F(n)  =  n, если n ≥ 2025;

F(n)  =  n + 3 + F(n + 3), если n < 2025.

 

Чему равно зна­че­ние вы­ра­же­ния F(23) − F(21)?

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

Ре­ше­ние.

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

def F(n):

if n >= 2025:

return n

if n < 2025:

return n + 3 + F(n + 3)

print(F(23) - F(21))

 

Ответ: 1338.

 

При­ведём ре­ше­ние Ев­ге­ния Дж­об­са (ана­ли­ти­че­ское на­блю­де­ние).

Для вы­яв­ле­ния за­ко­но­мер­но­сти вы­ра­же­ния f левая круг­лая скоб­ка n пра­вая круг­лая скоб­ка – f левая круг­лая скоб­ка n минус 2 пра­вая круг­лая скоб­ка вы­чис­лим зна­че­ния функ­ции для чисел в диа­па­зо­не [2016; 2027].

 

202720262025202420232022202120202019201820172016
202720262025405440524050607860756072809980958091

 

Можно за­ме­тить, что раз­ни­ца между чис­лом, крат­ным 3, и чис­лом, на 2 боль­шим, уве­ли­чи­ва­ет­ся с каж­дой трой­кой на 2. Тогда:

 f левая круг­лая скоб­ка 2027 пра­вая круг­лая скоб­ка минус f левая круг­лая скоб­ка 2025 пра­вая круг­лая скоб­ка =2,  f левая круг­лая скоб­ка 2024 пра­вая круг­лая скоб­ка минус f левая круг­лая скоб­ка 2022 пра­вая круг­лая скоб­ка =4,  f левая круг­лая скоб­ка 2021 пра­вая круг­лая скоб­ка минус f левая круг­лая скоб­ка 2019 пра­вая круг­лая скоб­ка =6, f левая круг­лая скоб­ка 2018 пра­вая круг­лая скоб­ка минус f левая круг­лая скоб­ка 2016 пра­вая круг­лая скоб­ка =8.

Сле­до­ва­тель­но, нужно по­нять, какой трой­кой по счету будет трой­ка (23, 22, 21), и умно­жить её номер на 2. Вы­чис­лим:

 дробь: чис­ли­тель: левая круг­лая скоб­ка 2027 минус 23 пра­вая круг­лая скоб­ка , зна­ме­на­тель: 3 конец дроби плюс 1= дробь: чис­ли­тель: 2004 , зна­ме­на­тель: 3 конец дроби плюс 1=668 плюс 1=669.

 

При­ведём ре­ше­ние Ев­ге­ния Дж­об­са (ана­ли­ти­че­ское, вывод фор­му­лы).

За­ме­тим, что ре­кур­рент­ная фор­му­ла на­кап­ли­ва­ет зна­че­ние с шагом 3. То есть по­лу­ча­ет

 левая круг­лая скоб­ка n плюс 3 пра­вая круг­лая скоб­ка плюс левая круг­лая скоб­ка n плюс 6 пра­вая круг­лая скоб­ка плюс левая круг­лая скоб­ка n плюс 9 пра­вая круг­лая скоб­ка плюс \ldots плюс левая круг­лая скоб­ка n плюс 3 умно­жить на k пра­вая круг­лая скоб­ка плюс 2 умно­жить на левая круг­лая скоб­ка n плюс 3 умно­жить на левая круг­лая скоб­ка k плюс 1 пра­вая круг­лая скоб­ка пра­вая круг­лая скоб­ка ,

где зна­че­ние k  — мак­си­маль­ное целое число, для ко­то­ро­го вы­пол­ня­ет­ся не­ра­вен­ство n плюс 3 умно­жить на k мень­ше 2025.

Най­дем зна­че­ния k для 23 и 21:

23 плюс 3 умно­жить на k мень­ше 2025 рав­но­силь­но 3 k мень­ше 2002 рав­но­силь­но k мень­ше 667,33 ...,

от­ку­да k_\max =667; и

21 плюс 3 умно­жить на k мень­ше 2025 рав­но­силь­но 3 k мень­ше 2004 рав­но­силь­но k мень­ше 668,

тогда  k_\max =667.

Сле­до­ва­тель­но, имеем дело с двумя ря­да­ми оди­на­ко­вой длины:

 f левая круг­лая скоб­ка 23 пра­вая круг­лая скоб­ка = левая круг­лая скоб­ка 23 плюс 3 пра­вая круг­лая скоб­ка плюс левая круг­лая скоб­ка 23 плюс 6 пра­вая круг­лая скоб­ка плюс левая круг­лая скоб­ка 23 плюс 9 пра­вая круг­лая скоб­ка плюс \ldots плюс левая круг­лая скоб­ка 23 плюс 3 умно­жить на 667 пра­вая круг­лая скоб­ка плюс 2 умно­жить на левая круг­лая скоб­ка 23 плюс 3 умно­жить на левая круг­лая скоб­ка 667 плюс 1 пра­вая круг­лая скоб­ка пра­вая круг­лая скоб­ка ;

f левая круг­лая скоб­ка 21 пра­вая круг­лая скоб­ка = левая круг­лая скоб­ка 21 плюс 3 пра­вая круг­лая скоб­ка плюс левая круг­лая скоб­ка 21 плюс 6 пра­вая круг­лая скоб­ка плюс левая круг­лая скоб­ка 21 плюс 9 пра­вая круг­лая скоб­ка плюс \ldots плюс левая круг­лая скоб­ка 21 плюс 3 умно­жить на 667 пра­вая круг­лая скоб­ка плюс 2 умно­жить на левая круг­лая скоб­ка 21 плюс 3 умно­жить на левая круг­лая скоб­ка 667 плюс 1 пра­вая круг­лая скоб­ка пра­вая круг­лая скоб­ка .

Зна­чит, при вы­чи­та­нии из f(23) зна­че­ния f(21) по­лу­чим набор раз­но­стей:

f левая круг­лая скоб­ка 23 пра­вая круг­лая скоб­ка минус f левая круг­лая скоб­ка 21 пра­вая круг­лая скоб­ка = левая круг­лая скоб­ка левая круг­лая скоб­ка 23 плюс 3 пра­вая круг­лая скоб­ка минус левая круг­лая скоб­ка 21 плюс 3 пра­вая круг­лая скоб­ка пра­вая круг­лая скоб­ка плюс левая круг­лая скоб­ка левая круг­лая скоб­ка 23 плюс 6 пра­вая круг­лая скоб­ка минус левая круг­лая скоб­ка 21 плюс 6 пра­вая круг­лая скоб­ка пра­вая круг­лая скоб­ка плюс левая круг­лая скоб­ка левая круг­лая скоб­ка 23 плюс 9 пра­вая круг­лая скоб­ка минус левая круг­лая скоб­ка 23 плюс 9 пра­вая круг­лая скоб­ка пра­вая круг­лая скоб­ка плюс \ldots

\ldots плюс левая круг­лая скоб­ка левая круг­лая скоб­ка 23 плюс 3 умно­жить на 667 пра­вая круг­лая скоб­ка минус левая круг­лая скоб­ка 21 плюс 3 умно­жить на 667 пра­вая круг­лая скоб­ка пра­вая круг­лая скоб­ка плюс 2 умно­жить на левая круг­лая скоб­ка левая круг­лая скоб­ка 23 плюс 3 умно­жить на левая круг­лая скоб­ка 667 плюс 1 пра­вая круг­лая скоб­ка пра­вая круг­лая скоб­ка пра­вая круг­лая скоб­ка минус 2 умно­жить на левая круг­лая скоб­ка левая круг­лая скоб­ка 21 плюс 3 умно­жить на левая круг­лая скоб­ка 667 плюс 1 пра­вая круг­лая скоб­ка пра­вая круг­лая скоб­ка пра­вая круг­лая скоб­ка ,

то есть

 f левая круг­лая скоб­ка 23 пра­вая круг­лая скоб­ка минус f левая круг­лая скоб­ка 21 пра­вая круг­лая скоб­ка = 2 плюс 2 плюс 2 плюс \ldots плюс 2 плюс 2 умно­жить на 2 = 2 умно­жить на левая круг­лая скоб­ка 667 плюс 2 пра­вая круг­лая скоб­ка = 1338.

 

При­ведём ре­ше­ние Ев­ге­ния Дж­об­са на языке Python.

Так как шаг ре­кур­сии 3, то нет не­об­хо­ди­мо­сти хра­нить все зна­че­ния, до­ста­точ­но хра­нить по­след­ние три вы­чис­лен­ных и об­ра­щать­ся к вы­чис­лен­ным ранее зна­че­ни­ям по при­зна­ку остат­ка от де­ле­ния на 3. Также раз­ни­ца между зна­че­ни­я­ми 23 и 21 со­став­ля­ет 2, что озна­ча­ет, что спис­ка из трех эле­мен­тов точно хва­тит.

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

f = [0]*3

for n in range(2025, 2028):

f[n % 3] = n

# пе­ре­би­ра­ем зна­че­ния в по­ряд­ке убы­ва­ния до 21

for n in range(2024, 20, -1):

f[n % 3] = n + 3 + f[n % 3]

print(f[23 % 3] - f[21 % 3])


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

Источник: ЕГЭ по ин­фор­ма­ти­ке 06.04.2023. До­сроч­ная волна