Задание 25. Программирование. Обработка целочисленной информации. ЕГЭ 2026 по информатике

За это задание ты можешь получить 1 балл. На решение дается около 20 минут. Уровень сложности: высокий.
Средний процент выполнения: 10%
Ответом к заданию 25 по информатике может быть развернутый ответ (полная запись решения с обоснованием выполненных действий).

Алгоритм решения задания 25:

  1. Прочитай условие и определи входные данные (количество чисел, диапазон, признак окончания).
  2. Уточни, что требуется получить: сумму, количество, максимум/минимум, проверку условия, формирование результата.
  3. Выбери необходимые переменные: счётчики, накопители, текущий элемент.
  4. Запиши ввод исходных данных и инициализацию переменных.
  5. Организуй цикл обработки целочисленной последовательности.
  6. Внутри цикла выполни проверку условий и обновление переменных.
  7. После завершения цикла выведи требуемый результат.
  8. Проверь программу на простых тестах вручную.
  9. Запиши окончательный вариант программы в требуемом формате.

Задачи для практики

Задача 1

На Северном полюсе, в мастерской Деда Мороза, в преддверии Нового года, помощники проверяют список домов, куда нужно доставить подарки.

Каждый дом имеет свой номер, но Дед Мороз использует особую магическую маску для проверки:

  • Символ «?» означает, что Дед Мороз заглянет только в один дом с любой цифрой на этом месте.
  • Символ «*» означает, что Дед Мороз посетит все дома с любой последовательностью цифр, включая пустую.

Сегодня Дед Мороз хочет найти все дома, номера которых соответствуют маске 3?12?14*5, и которые волшебным образом делятся на 1917 без остатка.

Помощники создают список всех подходящих номеров домов и делят их на 1917, чтобы убедиться, что подарки попадут точно в нужные дома.

Задача:

  • Найти все натуральные числа, не превышающие 1010, которые соответствуют маске 3?12?14*5.
  • Отобрать среди них только те, которые делятся на 1917 без остатка.
  • В ответе составить таблицу, где первый столбец — это найденные числа в порядке возрастания, а второй столбец — результаты деления этих чисел на 1917.

🎄 Новогодняя магия: Каждый найденный номер дома — как сверкающая гирлянда на ёлке: он точно подходит под волшебную маску Деда Мороза и гарантирует, что подарки попадут в нужные руки.

Решение

Напишем простое решение на Python:

from fnmatch import fnmatch

for i in range(0, 10**10+1, 1917):
    if fnmatch(str(i), '3?12?14*5'):
        print(i, i // 1917)

Получим ответ:
351261495 183235
3212614035 1675855
3412614645 1780185
3712414275 1936575
3912414885 2040905

Ответ:
Показать решение
Бесплатный интенсив

Задача 2

.

Пусть для целого числа N > 4 000 000 определим величину S как сумму наименьшего и наибольшего простых делителей числа, не считая самого числа. Если простых делителей у числа нет, полагаем S = 0.

Необходимо перебрать целые числа, начиная с 4 000 001, в порядке возрастания, и найти среди них числа, для которых:

  • S > 50 000
  • S является палиндромом (одинаково читается слева направо и справа налево)

Выведите первые пять таких чисел в порядке возрастания, а рядом с ними — соответствующие значения S в таблице.

Пример:
Для числа 2310: наименьший простой делитель — 2, наибольший — 11, тогда S = 2 + 11 = 13.

Решение
Простые делители и палиндромы – Python

Код решения (Python)

def check_prostoe(n):
    if n < 2:
        return False
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            return False
    return True

def del_prost(n):
    delit = []
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            if check_prostoe(i):
                delit.append(i)
            j = n // i
            if j != i and check_prostoe(j):
                delit.append(j)
    return delit

def is_palindrome(number):
    return str(number) == str(number)[::-1]

found = 0
number = 4_000_001
results = []

while found < 5:
    delit = del_prost(number)
    if delit:
        S = min(delit) + max(delit)
        if S > 50000 and is_palindrome(S):
            results.append((number, S))
            found += 1
    number += 1

for n, S in results:
    print(n, S)

ОТВЕТ:

4000794 95259
4002106 117711
4002110 57175
4002579 63536
4003996 1001001

Ответ:
Показать решение
Бесплатный интенсив

Задача 3

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

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

Формат вывода: для каждого из 3 таких найденных чисел запишите их в порядке возрастания через пробел.

Решение

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

def m(n):
    divisors = []
    for i in range(2, n):
        if n % i == 0:
            divisors.append(i)
    if len(divisors) > 1:
        return min(divisors) + max(divisors)
    return 0


number = 452_023
k = 0
while k < 5:
    number += 1
    if m(number) % 7 == 4:
        print(number)
        k += 1

Ответ: 452036 452049 452050

Ответ: 452036 452049 452050
Показать решение
Бесплатный интенсив

Задача 4

Напишите программу, которая перебирает целые числа, большие 600 000, в порядке возрастания и ищет среди них такие числа, что среди делителей этого числа, есть делитель оканчивающийся на 6, не считая само число и делитель равный 6 . Вывести первые 5 найденных чисел.

Формат вывода: для каждого из 5 таких найденных чисел запишите их в порядке возрастания через пробел.

Решение

Приведём решение номера на языке программирования Python. Можно решить стандартным путём:

def m(n):
    for i in range(2, n):
        if n % i == 0:
            if i != 6 and i % 10 == 6:
                return True
    return False


number = 600_000
k = 0
while k < 5:
    number += 1
    if m(number):
        print(number, end=" ")
        k += 1
Ответ: 600002 600006 600008 600012 600016
Показать решение
Бесплатный интенсив

Задача 5

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
1) символ «?» означает ровно одну произвольную цифру;
2) символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задаватьи пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих 108, найдите все числа, соответствующие маске 1?3?1*5?6, делящиеся на 629 без остатка.
В ответе запишите сумму результатов от деления найденных чисел на 629.
Количество строк в таблице для ответа избыточно.

Решение
from fnmatch import fnmatch

s = 0
for x in range(0, 10 ** 8, 629):
    if fnmatch(str(x), '1?3?1*5?6'):
        s += x // 629
print(s)
Ответ: 53598
Показать решение
Бесплатный интенсив

Задача 6

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

Напишите программу, которая перебирает целые числа, большие 124 987, в порядке возрастания и ищет среди них такие, для которых значение M равно 3. Вывести первые 3 найденных чисел.

Формат вывода: для каждого из 3 таких найденных чисел запишите их в порядке возрастания через пробел.

Решение

Приведём решение номера на языке программирования Python. Можно решить стандартным путём:

def m(n):
    divisors = []
    for i in range(2, n):
        if n % i == 0:
            divisors.append(i)
    return len(divisors)


number = 124_987
k = 0
while k < 3:
    number += 1
    if m(number) == 3:
        print(number, end=" ")
        k += 1

Но такой способ имеет достаточно долгое решение. Можно вспомнить, что нечётное количество делителей есть только у чисел из которых можно вычесть квадратный корень. Тогда задачу можно решить гораздо быстрее:

def m(n):
    divisors = []
    for i in range(2, n):
        if n % i == 0:
            divisors.append(i)
    return len(divisors)


number = 124_609
z = 707
k = 0
while k < 3:
    number += z
    z += 2
    if m(number) == 3:
        print(number, end=" ")
        k += 1

Но и этот способ можно ускорить, если знать, что до корня из числа должен встретиться ровно 1 корень

def m(n):
    divisors = []
    for i in range(2, int(n ** 0.5)):
        if n % i == 0:
            divisors.append(i)
    return len(divisors)


number = 124_609
z = 707
k = 0
while k < 3:
    number += z
    z += 2
    if m(number) == 1:
        print(number, end=" ")
        k += 1

Ещё один способ заключается в том, чтобы перебирать не квадраты чисел, а числа до возведения в квадрат. Таким образом вычисляем корень из 124 987 и двигаемся от числа 354

def m(n):
    divisors = []
    for i in range(2, int(n ** 0.5)):
        if n % i == 0:
            divisors.append(i)
    return len(divisors)


number = 354
k = 0
while k < 3:
    new_number = number ** 2
    if m(new_number) == 1:
        print(new_number, end=" ")
        k += 1
    number += 1
Ответ: 130321 279841 707281
Показать решение
Бесплатный интенсив

Задача 7

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

— символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательноcть.

Среди натуральных чисел, не превышающих 109, найдите все числа, соответствующие маске 352*6?5*, являющиеся полными квадратами.

В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им квадратные корни.

Решение
for num in range(1, 1000000):
    num = str(num)
    fl = False
    for i in range(len(num)-2):
        if num[i] == '6' and num[i+2] == '5':
            fl = True
    if fl:
        num = int('352'+num)
        if int(num ** 0.5) ** 2 == num:
            print(num, num ** 0.5)

Или можно другое решение, на основе срезов:

for i in range(352605, 10 ** 9):
    if round(i ** 0.5) ** 2 == i:
        s = str(i)
        if s[:3] == '352' and '6' in s[3:-2] and '5' in s[4:] and s.index('6') + 2 == s.rindex('5'):
            print(i, round(i ** 0.5))

Хотите самое быстрое решение? Вы замечали, что все соседние полные квадраты отличаются друг от друга на нечётное число, при этом это строго возрастающая последовательность нечётных числе. Например, нам даны полные квадраты 1, 4, 9, 16, 25, 36, 49. Разность между ними будет: 3, 5, 7, 9, 11, 13. Правда интересная закономерность? На её основе можно сделать решение:

from fnmatch import fnmatch

z = 1189
i = 352836
while i <= 10 ** 9:
    if fnmatch(str(i), '352*6?5*'):
        print(i, i ** 0.5)
    i += z
    z += 2

Ответ:

352500625 18775

352763524 18782

Ответ:
Показать решение
Бесплатный интенсив

Задача 8

РЕШЕНИЕ БЕЗ ОТВЕТА НЕ ПРИНИМАЕТСЯ, В ПРОТИВНОМ СЛУЧАЕ РАБОТА БУДЕТ АННУЛИРОВАНА

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

— символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательноcть.

Среди натуральных чисел, не превышающих 109, найдите все числа, соответствующие маске 123*4*5*, делящиеся на число 123456 без остатка.

В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им частные от деления этих чисел на 123456.

Решение

Задачу можно решить несколькими способами. Например, можно формировать число, перебирать все варианты, либо рассмотреть задачу с точки зрения теории чисел. Алгоритм ниже основан на переборе всех чисел. Чтобы он был возможен, отсечём первые 3 разряда, потому что они константны. "123" будем "приклеивать" позже". Маска *4*5 говорит о том, что должна найтись 4, которая раньше 5. Причём случай "5451" тоже подходит под такую маску. Поэтому будем искать индекс первой четвёрки и последней пятерки. Индекс четвёрки должен идти раньше индекса пятёрки.

for num in range(1, 1000000):
    num = str(num)
    ind4 = ind5 = -1
    for i in range(len(num)):
        if num[i] == '4':
            ind4 = i
            break
    for i in range(len(num)):
        if num[i] == '5':
            ind5 = i
    if ind4 != -1 and ind5 != -1 and ind4 < ind5:
        num = int('123' + num)
        if num % 123456 == 0:
            print(num, num // 123456)

Ответ:

123456 1

1234560 10

12345600 100

123456000 1000

123579456 1001

Ответ:
Показать решение
Бесплатный интенсив

Задача 9

Назовём маской числа последовательность состоящую из цифр и символ «*» и «?»:
— символ «?» означает ровно одну пропущенную цифру;
— символ «*» означает любую последовательность цифр, включая пустую.

Среди натуральных чисел, больших 106, найдите пять чисел, соответствующие маске 123*4*9 и делящиеся на 13 без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им частные от деления на 13.

Решение

Запишем решение на языке Python:

k = 0
number = 10 ** 6 + 1
while k < 5:
    s =str(number)
    if s[:3] == '123' and s[-1] == '9' and '4' in s[3:-1] and number % 13 == 0:
        k += 1
        print(number, number // 13)
    number += 1

1230489 94653
1230749 94673
1232049 94773
1232439 94803
1233349 94873

Ответ:
Показать решение
Бесплатный интенсив

Задача 10

Назовём маской числа последовательность состоящую из цифр и символ «*» и «?»:
— символ «?» означает ровно одну пропущенную цифру;
— символ «*» означает любую последовательность цифр, включая пустую.

Среди натуральных чисел, больших 106, найдите пять чисел, соответствующие маске 123*4?*9 и делящиеся на 13 без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им частные от деления на 13.

Решение

Запишем решение на языке Python:

k = 0
number = 10 ** 6 + 1
while k < 5:
    s =str(number)
    if s[:3] == '123' and s[-1] == '9' and '4' in s[3:-2] and number % 13 == 0:
        k += 1
        print(number, number // 13)
    number += 1

1230489 94653
1232439 94803
1233479 94883
1234129 94933
1234259 94943

Ответ:
Показать решение
Бесплатный интенсив

Задача 11

ДЛЯ 2022

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

— символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательноcть.

Среди натуральных чисел, не превышающих 109, найдите все числа, соответствующие маске 1234?57??, делящиеся на число 146 без остатка.

В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им частные от деления этих чисел на 146.

Решение

Для решение этого номера необходимо написать программу, которая могла бы проверить все такие числа

for i in range(10):
    for j in range(10):
        for k in range(10):
            x = int(f'1234{i}57{j}{k}')
            if x % 146 == 0:
                print(x, x // 146)

Ответ:

123405770 845245
123425772 845382
123435700 845450
123445774 845519
123455702 845587
123465776 845656
123475704 845724
123485778 845793
123495706 845861
Ответ:
Показать решение
Бесплатный интенсив

Задача 12

Дан числовой отрезок натуральных чисел: [1000, 5000]. Напишите программу, которая ищет на данном отрезке числа, у которых ровно два чётных делителя, не считая самого числа.

Для каждого найденного числа запишите через пробел само число и наибольший чётный делитель этого числа (кроме самого числа). Каждая следующая найденная пара пишется с новой строки в порядке возрастания первого числа.

Например, если подошло два числа: 18 и 50, необходимо записать в ответ:

18 6
50 10

В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.

Решение

Напишем код, где в основной программе будет перебираться диапазон наших числах, а проверка условия будет осуществляться в отдельной функции. Пример программы на Python:

def check_del(x):

max_del = 0

count = 0

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

if x % i == 0:

count += 1

max_del = i

if count > 2:

return -1

if count == 2:

return max_del

else:

return -1

for x in range(1000, 5000 + 1):

num = check_del(x)

if num != -1:

print(x, num)

Ответ:

1058 46

1682 58

1922 62

2738 74

3362 82

3698 86

4418 94

Ответ:
Показать решение
Бесплатный интенсив

Задача 13

Дан числовой отрезок натуральных чисел: [192, 237]. Напишите программу, которая ищет на данном отрезке числа, у которых ровно шесть делителей, не считая единицы и самого числа.

Для каждого найденного числа запишите через пробел само число и наибольший делитель этого числа (кроме самого числа). Каждая следующая найденная пара пишется с новой строки в порядке возрастания первого числа. Например, если подошло два числа: 10 и 21, необходимо записать в ответ:

10 5

21 7

В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.

Решение

Решение на Python:

def check_del(x):
max_del = 0
count = 0
for i in range(2, x//2+1):
if x % i == 0:
count += 1
max_del = i
if count == 6:
return max_del
else:
return -1

for x in range(192, 237 + 1):
num = check_del(x)
if num != -1:
print(x, num)

Решение на C++:

int check(int val){
int count = 0, max = 0;
for (int i = 2; i <= val / 2; ++i)
if (val % i == 0){
count++;
max = i; // последний делитель - наибольший
}
if (count == 6)
return max;
return - 1;
}

int main(){
for (int i = 192; i <= 237; ++i){
int rez = check(i);
if (rez != -1)
cout << i << " " << rez << endl;
}
return 0;
}

Ответы: 
195 65
222 111
230 115
231 77
232 116

Ответ:
Показать решение
Бесплатный интенсив

Задача 14

Дан числовой отрезок натуральных чисел: [59874, 60000]. Напишите программу, которая ищет на данном отрезке числа, у которых ровно четыре делителя, не считая единицы и самого числа.

Для каждого найденного числа запишите через пробел само число и наибольший делитель этого числа (кроме самого числа). Каждая следующая найденная пара пишется с новой строки в порядке возрастания первого числа. Например, если подошло два числа: 10 и 21, необходимо записать в ответ:

10 5

21 7

В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.

Решение

Напишем код, где в основной программе будет перебираться диапазон наших числах, а проверка условия будет осуществляться в отдельной функции. Пример программы на Python:

def check_del(x):

max_del = 0

count = 0

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

if x % i == 0:

count += 1

max_del = i

if count > 4:

return -1

if count == 4:

return max_del

else:

return -1

for x in range(59874, 60000 + 1):

num = check_del(x)

if num != -1:

print(x, num)

Ответ:

59876 29938

59877 19959

59927 8561

59931 19977

59932 29966

59949 19983

59975 11995

Ответ:
Показать решение
Бесплатный интенсив

Задача 15

Дан числовой отрезок натуральных чисел: [13954, 29313]. Напишите программу, которая ищет на данном отрезке числа, у которых ровно три делителя, не считая единицы и самого числа.

Для каждого найденного числа запишите через пробел само число и наибольший делитель этого числа (кроме самого числа). Каждая следующая найденная пара пишется с новой строки в порядке возрастания первого числа. Например, если подошло два числа: 10 и 21, необходимо записать в ответ:

10 5

21 7

В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.

Решение

Напишем код, где в основной программе будет перебираться диапазон наших числах, а проверка условия будет осуществляться в отдельной функции. Пример программы на Python:

def check_del(x):

max_del = 0

count = 0

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

if x % i == 0:

count += 1

max_del = i

if count == 3:

return max_del

else:

return -1

for x in range(13954, 29313 + 1):

num = check_del(x)

if num != -1:

print(x, num)

Ответ:

14641 1331

28561 2197

Ответ:
Показать решение
Бесплатный интенсив

Задача 16

Дан числовой отрезок натуральных чисел: [1775, 1874]. Напишите программу, которая ищет на данном отрезке числа, являющиеся простыми. Простое число - число, которое делится только на единицу и само число.

Для каждого найденного числа запишите через пробел порядковый номер и само число. Каждая следующая найденная пара пишется с новой строки в порядке возрастания простого числа. Например, если подошло два числа: 7 и 13, необходимо записать в ответ:

1 7

2 13

В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.

Решение

Напишем код, где в основной программе будет перебираться диапазон наших числах, а проверка условия будет осуществляться в отдельной функции. Пример программы на Python:

def check_del(x):
    count = 2
    for i in range(2, x//2+1):
        if x % i == 0:
            count += 1
    return count == 2


num = 1
for x in range(1775, 1874 + 1):
    if check_del(x):
        print(num, x)
        num += 1

Ответ:

1 1777

2 1783

3 1787

4 1789

5 1801

6 1811

7 1823

8 1831

9 1847

10 1861

11 1867

12 1871

13 1873

Ответ:
Показать решение
Бесплатный интенсив

Задача 17

Дан числовой отрезок натуральных чисел: [21000, 26000]. Напишите программу, которая ищет на данном отрезке числа, у которых ровно два чётных делителя, не считая самого числа и единицы.

Для каждого найденного числа запишите через пробел само число и наибольший чётный делитель этого числа (кроме самого числа). Каждая следующая найденная пара пишется с новой строки в порядке возрастания первого числа. Например, если подошло два числа: 10 и 21, необходимо записать в ответ:

10 5
21 7

В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.

Решение

Пример программы на Python:

def check_del(x):
max_del = 0
count = 0
for i in range(2, x//2+1, 2):
if x % i == 0:
count += 1
max_del = i
if count > 2:
return -1
if count == 2:
return max_del
else:
return -1

for x in range(21000, 26000 + 1):
num = check_del(x)
if num != -1:
print(x, num)



Пример программы на C++:

int main(){
for (int i = 21000; i <= 26000; ++i){
int count = 0, max = 0;
for (int j = 2; j <= i / 2; j += 2) {
if (i % j == 0) {
count++;
max = j;
if (count > 2)
break;
}
}
if (count == 2)
cout << i << " " << max << endl;
}
return 0;
}

Ответ:
21218 206
22898 214
23762 218
25538 226

Ответ:
Показать решение
Бесплатный интенсив

Задача 18

Дан числовой отрезок натуральных чисел: [1239, 1286]. Напишите программу, которая ищет на данном отрезке числа, являющиеся простыми. Простое число - число, которое делится только на единицу и само число.

Для каждого найденного числа запишите через пробел порядковый номер и само число. Каждая следующая найденная пара пишется с новой строки в порядке возрастания простого числа. Например, если подошло два числа: 7 и 13, необходимо записать в ответ:

1 7

2 13

В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.

Решение

Напишем код, где в основной программе будет перебираться диапазон наших числах, а проверка условия будет осуществляться в отдельной функции. Пример программы на Python:

def check_del(x):

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

if x % i == 0:

return False

return True

n = 0

for x in range(1239, 1286 + 1):

if check_del(x):

n += 1

print(n, x)

Ответ:

1 1249

2 1259

3 1277

4 1279

5 1283

Ответ:
Показать решение
Бесплатный интенсив

Задача 19

Дан числовой отрезок натуральных чисел: [2101, 13254]. Напишите программу, которая ищет на данном отрезке числа, у которых ровно три делителя, не считая единицы и самого числа.

Для каждого найденного числа запишите через пробел само число и наибольший делитель этого числа (кроме самого числа). Каждая следующая найденная пара пишется с новой строки в порядке возрастания первого числа. Например, если подошло два числа: 10 и 21, необходимо записать в ответ:

10 5

21 7

В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.

Решение

Напишем код, где в основной программе будет перебираться диапазон наших числах, а проверка условия будет осуществляться в отдельной функции. Пример программы на Python:

def check_del(x):

max_del = 0

count = 0

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

if x % i == 0:

count += 1

max_del = i

if count == 3:

return max_del

else:

return -1

for x in range(2101,13254 + 1):

num = check_del(x)

if num != -1:

print(x, num)

Ответ:

2401 343

Ответ:
Показать решение
Бесплатный интенсив

Задача 20

Дан числовой отрезок натуральных чисел: [11100, 11200]. Напишите программу, которая ищет на данном отрезке числа, у которых ровно два нечётных делителя, не считая единицы и самого числа.

Для каждого найденного числа запишите через пробел само число и наибольший нечётный делитель этого числа (кроме самого числа). Каждая следующая найденная пара пишется с новой строки в порядке возрастания первого числа. Например, если подошло два числа: 10 и 21, необходимо записать в ответ:

10 5

21 7

В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.

Решение

Напишем код, где в основной программе будет перебираться диапазон наших числах, а проверка условия будет осуществляться в отдельной функции. Пример программы на Python:

def check_del(x):

max_del = 0

count = 0

for i in range(3, x//2+1, 2):

if x % i == 0:

count += 1

max_del = i

if count > 2:

return -1

if count == 2:

return max_del

else:

return -1

for x in range(11100, 11200 + 1):

num = check_del(x)

if num != -1:

print(x, num)

Решение на C++:

int check(int val){
int count = 0, max = 0;
for (int i = 2; i <= val / 2; ++i)
if (val % i == 0 && i % 2 != 0){
count++;
max = i; // последний делитель - наибольший
}
if (count == 2)
return max;
return - 1;
}

int main(){
for (int i = 11100; i < 11201; ++i){
int rez = check(i);
if (rez != -1)
cout << i << " " << rez << endl;
}
return 0;
}

Ответ:

11101 653

11103 3701

11105 2221

11107 383

11111 271

11127 3709

11129 359

11141 857

11143 1013

11147 157

11153 587

11157 3719

11167 859

11179 1597

11181 3727

11183 211

11185 2237

11189 167

11195 2239

11199 3733

Ответ:
Показать решение
Бесплатный интенсив
Показать еще
  • Без воды
  • Ламповая атмосфера
  • Крутые преподаватели

ЕГЭ 2026: бесплатный курс
по информатике

На бесплатном демо-курсе ты:
  • Узнаешь как кодируется изображение
  • Поймешь как решать 7 номер ЕГЭ
  • Разберешься с паролями
  • Потренируешь 11 и 4 номер ЕГЭ
Получи бесплатный демо-доступ
Оставь заявку и займи место
на бесплатном курсе Турбо ЕГЭ
Нажимая на кнопку «Отправить», вы принимаете положение об обработке персональных данных.