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

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

На­пи­ши­те про­грам­му, ко­то­рая пе­ре­би­ра­ет целые числа, боль­шие 452 021, в по­ряд­ке воз­рас­та­ния и ищет среди них такие, для ко­то­рых зна­че­ние M при де­ле­нии на 7 даёт в остат­ке 3. Вы­ве­сти пер­вые 5 най­ден­ных чисел и со­от­вет­ству­ю­щие им зна­че­ния M.

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

На­при­мер, для числа 20 М  =  2 + 10  =  12, оста­ток при де­ле­нии на 7 не равен 3; для числа 21 М  =  3 + 7  =  10, оста­ток при де­ле­нии на 7 равен 3.

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

Ответ:

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

Ре­ше­ние.

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

 

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

var

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

begin

num := 452022;

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 7 = 3 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.

 

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

452025 150678

452029 23810

452034 226019

452048 226026

452062 226033

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

num = 452022

count = 0

while True:

sqrtI = round(num ** 0.5)

for j in range(2, sqrtI + 1):

if num % j == 0:

if (j + num // j) % 7 == 3:

count += 1

print(num, ' ', j + num // j);

break

else:

break

if count == 5:

break

num += 1

 

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

c = 0

for n in range(452022, 1000000):

de = []

for j in range(2,n):

if n % j == 0:

de.append(j)

if len(de) >= 2:

m = de[0] + de[-1]

if m % 7 == 3:

c += 1

print(n , m)

if c == 5:

break

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