Задания
Версия для печати и копирования в MS Word

Най­ди­те 5 чисел, боль­ших 500 000, таких, что среди их де­ли­те­лей есть число, окан­чи­ва­ю­ще­е­ся на 8, при этом этот де­ли­тель не равен 8 и са­мо­му числу. В ка­че­стве от­ве­та при­ве­ди­те 5 наи­мень­ших чисел, со­от­вет­ству­ю­щих усло­вию.

Фор­мат вы­во­да: для каж­до­го из 5 таких най­ден­ных чисел в от­дель­ной стро­ке сна­ча­ла вы­во­дит­ся само число, затем ми­ни­маль­ный де­ли­тель, окан­чи­ва­ю­щий­ся на 8, не рав­ный 8 и са­мо­му числу.

Ответ:

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

Ре­ше­ние.

Пас­каль

var c, d, i : integer;

begin

    c := 0;

    for i := 500000 to 600000 do begin

        for d := 18 to (i div 2) do

            if (i mod d = 0) and (d mod 10 = 8) then begin

                    с := с+1;

                    writeln(i, ' ', d);

                    break;

                end;

         if c = 5 then break;

    end;

end.

Python

c = 0

for i in range(500000, 600000):

    for d in range(18, (i//2 + 1)):

        if ((i % d) == 0) and ((d % 10) == 8):

                c += 1

                print(i, d)

                break

    if c == 5:

        break

С++

#include <iostream>

#include <cmath>

using namespace std;

int main(){

    int c = 0;

    for(long int i=500000; i<600000; i++){

        for(int d = 18; d <= round(i/2); d++)

            if(i % d == 0 && d % 10 == 8){

                    с++;

                    std::cout << i << " " << md << std::endl;

                    break;

                }

            if(c == 5) break;

    }

}

 

В ре­зуль­та­те ра­бо­ты про­грам­ма долж­на вы­ве­сти сле­ду­ю­щее:

500002 178

500004 18

500016 48

500018 58

500020 4348

 

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

n = 500000

cnt = 0

while cnt < 5:

for factor in range(18, n//2+1):

if n%factor == 0 and str(factor)[-1] == '8':

print(n, factor)

cnt += 1

break

n += 2

 

 

При­ведём ре­ше­ние Юлии Леон­тье­вой на языке Python.

def f(x):

s = []

while x>0:

for i in range(2,int(x**0.5)+1):

if x%i==0:

if i%10==8 and i!=8:

s.append(i)

if x//i!=i and x//i!=8 and (x//i)%10==8:

s.append(x//i)

return s

сount = 0

for x in range(500_001,500_100):

s = f(x)

if len(s)>0:

print(x,min(s))

сount += 1

if сount == 5:

break


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

Источник: ЕГЭ по ин­фор­ма­ти­ке 24.06.2021. Ос­нов­ная волна
Раздел кодификатора ФИПИ: