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

Пусть M  — сумма ми­ни­маль­но­го и мак­си­маль­но­го на­ту­раль­ных де­ли­те­лей це­ло­го числа, не счи­тая еди­ни­цы и са­мо­го числа. Если таких де­ли­те­лей у числа нет, то зна­че­ние M счи­та­ет­ся рав­ным нулю.

На­пи­ши­те про­грам­му, ко­то­рая пе­ре­би­ра­ет целые числа, бо́льшие 700 000, в по­ряд­ке воз­рас­та­ния и ищет среди них такие, для ко­то­рых зна­че­ние M окан­чи­ва­ет­ся на 8. Вы­ве­ди­те пер­вые пять най­ден­ных чисел и со­от­вет­ству­ю­щие им зна­че­ния M.

Фор­мат вы­во­да: для каж­до­го из пяти таких най­ден­ных чисел в от­дель­ной стро­ке сна­ча­ла вы­во­дит­ся само число, затем  — зна­че­ние М.

Стро­ки вы­во­дят­ся в по­ряд­ке воз­рас­та­ния най­ден­ных чисел.

Ко­ли­че­ство строк в таб­ли­це для от­ве­та из­бы­точ­но.

Ответ:

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

Ре­ше­ние.

За­ме­тим, что у каж­до­го числа де­ли­те­ли пар­ные, на­при­мер, у числа 8 это 1 и 8, 2 и 4. Будем на­хо­дить пер­вый на­ту­раль­ный де­ли­тель числа, от­лич­ный от еди­ни­цы, и про­ве­рять, де­лит­ся ли сумма най­ден­но­го де­ли­те­ля с его пар­ным де­ли­те­лем на 10 с остат­ком 8. Если усло­вие вы­пол­ня­ет­ся  — вы­во­дим ис­ход­ное число и сумму его пар­ных ми­ни­маль­но­го и мак­си­маль­но­го де­ли­те­лей на экран и вы­хо­дим из цикла для пе­ре­бо­ра де­ли­те­лей числа, иначе сразу вы­хо­дим из цикла для пе­ре­бо­ра де­ли­те­лей числа.

 

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

var

count, j, k, sqrtI, num: longint;

begin

num := 700000;

count := 0;

while True do begin

sqrtI := round(sqrt(num));

for j := 2 to sqrtI do begin

if num mod j = 0 then begin

if (j + num div j) mod 10 = 8 then begin

count := count + 1;

writeln(num, ' ', j + num div j);

break;

end

else break;

end;

end;

if count = 5 then break;

num := num + 1;

end;

end.

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

700005 233338

700007 100008

700012 350008

700015 140008

700031 24168

 

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

count = 0

num = 700000

while count < 5:

num += 1

mx = 0

mn = num + 1

for i in range(2,int(num // 2)+1):

if num % i == 0:

mx = max(mx,i)

mn = min(mn,i)

M = mn + mx

if (M != num + 1) and (M % 10 == 8):

print(num, M)

count += 1

 

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

count_del = 0

i = 700_000

while count_del < 5:

i += 1

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

if i % j == 0:

if i / j == i:

break

if (i / j + j) % 10 == 8:

print(i, i // j + j)

count_del += 1

break

Источник: Де­мон­стра­ци­он­ная вер­сия ЕГЭ−2022 по ин­фор­ма­ти­ке
Раздел кодификатора ФИПИ: