Модуль: ЕГЭ-2022. Вопрос 25. Поиск делителей


Задача

6/11

Демо-2022. Вопрос 25

Теория

Разбор задачи № 25 демо-варианта 2022 года

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

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


 
Решение
1. Как вывести только 5 найденных чисел? Для этого организуем цикл, который будет уменьшать значение переменной (N) от 5 до 0. Как только станет равной 0, цикл заканчивает свою работу.
Внутри цикла будем перебирать все числа большие 700 000 (используя для этого переменную i) и вычислять значение M, и если оно будет оканчиваться на 8, то будем выводить это число и его значение M, а также уменьшать счетчик выведенных чисел (N). Найденные числа будет выводиться в порядке возрастания, так как каждое следующее рассматриваемое число на 1 больше предыдущего.
 

C++

Python Pascal
i = 700000
N = 5
while (N != 0)
{
  i++;
  ...
  if (M % 10 == 8)
  {
    вывод
    N--;
  }        
}

i = 700 000
N = 5 
while N != 0: 
    i += 1
    ...
    if (нашли нужное число)
        вывод
        N = N - 1
 

i := 700000
N := 5 
while N != 0 do
begin
  i := i + 1
  ...
  if нашли нужное число then
  begin
    вывод
    N := N - 1;
  end;
end;




2. Как посчитать значение M?
Заметим, что минимальный и максимальный делители числа (i) являются "симметричными" (парными). Поэтому нам достаточно найти первый отличный от 1 делитель. Он и будем минимальным. Максимальный делитель можно будет найти, разделив число (i) на его минимальный делитель. Сразу же вычислим значение M для числа (i).  Для каждого числа значение M считается свое, поэтому перед циклом необходимо M обнулить. 
 

C++

Python Pascal

M = 0
while (del * del < i)
{
  if (i % del == 0)
  {
    M = del + i/del;
    break;
  }
  del++;
}

M = 0
while del * del < i:
    if i % del == 0:
        M = del + i/del
        break       
    del++

M := 0
while del * del < n do
begin
  if n mod i = 0 then
  begin
    M := del + i div del:
    break;
  end;
  del := del + 1;
end;


Возможные делители перебираем от 2 до \(\sqrt n - 1\). Так как, если число (i) является полным квадратом и не имеет других делителей, кроме \(\sqrt n\), то в данном случае M у нас должно быть равным 0
Если мы нашли не равный 1 минимальный делитель, то можно прерывать (break) цикл while. Дальше перебирать возможные делители не имеет смысла.

Попробуйте написать программу целиком самостоятельно.

Задача

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

Формат вывода: для каждого из пяти таких найденных чисел в отдельной строке сначала выводится само число, затем – значение M (через один пробел). Строки выводятся в порядке возрастания найденных чисел.

Выберите правильный ответ, либо введите его в поле ввода

Комментарий учителя