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

Ниже на пяти язы­ках про­грам­ми­ро­ва­ния за­пи­сан ал­го­ритм. По­лу­чив на вход число х, этот ал­го­ритм пе­ча­та­ет число М. Из­вест­но, что х > 40. Ука­жи­те наи­мень­шее такое (т. е. боль­шее 40) число х, при вводе ко­то­ро­го ал­го­ритм пе­ча­та­ет 2.

 

 

Бей­сикPython

DIM X, L, M AS INTEGER

INPUT X

L = X

M = 12

IF L MOD 2 = 0 THEN

          M = 24

ENDIF

WHILE L <> M

IF L > M THEN

          L = L − M

ELSE

          M = M − L

ENDIF

WEND

PRINT M

 

x = int(input())

L = x

M = 12

if L % 2 == 0:

            M = 24

while L != M:

            if L > M:

                L = L − M

            else:

                M = M − L

print(M)

Пас­кальАл­го­рит­ми­че­ский язык

var x, L, M: integer;

begin

    readln(x);

    L := x;

    M := 12;

    if L mod 2 = 0 then

      M := 24;

    while L <> M do

      if L > M then

        L := L − M

      else

        M := M − L;

    writeln(M);

end.

алг

нач

   цел x, L, M

   ввод x

   L := x

   M := 12

   если mod(L, 2) = 0

    то

      M := 24

   все

нц пока L <> M

    если L > M

      то

        L := L − M

      иначе

        M = M − L

    все

   кц

   вывод M

кон

Си++

#include <iostream>

using namespace std;

int main()

{

    int x, L, M;

    cin >> x;

    L = x;

    M = 12;

    if (L % 2 == 0)

        M = 24;

    while (L != M) {

        if(L > M)

           L = L − M;

        else

           M = M − L

}

cout « M « endl;

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

Ре­ше­ние.

Цикл while  — ничто иное, как ал­го­ритм Ев­кли­да, то есть он ищет наи­боль­ший общий де­ли­тель чисел M и L. В конце ра­бо­ты цикла M = L = НОД(M, L).

Если x  — чётное число, то L = x, M = 24. Если нечётное, то L = x, M = 12.

При этом, если x  — нечётное число, то НОД(L, M)  не равно 2. По­это­му x дол­жен быть чётным.

Таким об­ра­зом, нам нужно самое ма­лень­кое чётное число, ко­то­рое боль­ше 40 и не де­лит­ся на 3 и 4 (тогда бы НОД(L, M) рав­нял­ся 6 или 4). Это число 46.

 

Ответ: 46.

 

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

for i in range(41, 10000):

x = i

L = x

M = 12

if L % 2 == 0:

M = 24

while L != M:

if L > M:

L = L - M

else:

M = M - L

if M == 2:

print(i)

break


Аналоги к заданию № 9371: 10483 10510 Все

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