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

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

1.  Если ис­ход­ное число крат­но 2, оно де­лит­ся на 2, в про­тив­ном слу­чае из него вы­чи­та­ет­ся 1.

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

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

4.  Число, по­лу­чен­ное на шаге 3, счи­та­ет­ся ре­зуль­та­том ра­бо­ты ал­го­рит­ма.

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

1.  Число 22 крат­но 2, оно де­лит­ся на 2, по­лу­ча­ет­ся 11.

2.  Число 11 не крат­но 3, из него вы­чи­та­ет­ся 1, по­лу­ча­ет­ся 10.

3.  Число 10 крат­но 5, оно де­лит­ся на 5, по­лу­ча­ет­ся 2.

4.  Ре­зуль­тат ра­бо­ты ал­го­рит­ма R  =  2.

Сколь­ко су­ще­ству­ет раз­лич­ных на­ту­раль­ных чисел N, при об­ра­бот­ке ко­то­рых по­лу­чит­ся R  =  1?

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

Ре­ше­ние.

Рас­смот­рим ра­бо­ту ал­го­рит­ма в об­рат­ном по­ряд­ке:

Крас­ным на ри­сун­ке от­ме­че­ны пути, ко­то­рые не под­хо­дят по усло­вию за­да­чи. Число 2 нель­зя по­лу­чить вы­чи­та­ни­ем еди­ни­цы из числа 3, по­сколь­ку оно крат­но трём. Число 5 нель­зя по­лу­чить вы­чи­та­ни­ем еди­ни­цы из числа 6, по­сколь­ку оно крат­но трём. Число 15 нель­зя по­лу­чить вы­чи­та­ни­ем еди­ни­цы из числа 16, по­сколь­ку оно крат­но двум.

Таким об­ра­зом, под­хо­дят три числа: 7, 12 и 30.

 

Ответ: 3.

 

При­ве­дем ре­ше­ние Ми­ха­и­ла Глин­ско­го.

За­ме­тим, что ис­ход­ное число не пре­вы­ша­ет 30, по­сколь­ку из боль­ших чисел при по­сле­до­ва­тель­ном де­ле­нии на 2, 3 и 5 по­лу­чат­ся числа, боль­шие 1. С по­мо­щью про­грам­мы на языке Пас­каль будем пе­ре­би­рать числа от 1 до 30, об­ра­ба­ты­вать их по за­дан­но­му ал­го­рит­му и вы­во­дить на экран, если в ре­зуль­та­те об­ра­бот­ки по­лу­чит­ся 1.

var

  i,x:integer;

begin

  for i:=1 to 30 do begin

    x:=i;

    if x mod 2=0 then x:= x div 2 else x:=x-1;

    if x mod 3=0 then x:= x div 3 else x:=x-1;

    if x mod 5=0 then x:= x div 5 else x:=x-1;

    if x=1 then println(i);

    end;

end.

Раздел кодификатора ФИПИ: