ALEXMATH

Информатика. ЕГЭ

Задания для подготовки

Задачи разных лет из реальных экзаменов, демо-вариантов, сборников задач и других источников

Перейти к заданиям

Задание 25. Информатика. ЕГЭ. Поляков-8406

Просмотры: 293
Изменено: 1 февраля 2026

*(А. Сражаев) Назовём особым числом такое простое натуральное число, которое на \(150\) больше ближайшего меньшего простого числа. Напишите программу, которая находит все особые числа на отрезке \([10~000~000; \, 30~000~000].\) В ответе запишите все найденные особые числа, справа от каждого из них запишите сумму всех делителей числа, полученного из найденного особого числа после удаления первой и последней цифр.

Решение:

Python


def sieve(n):
    sv = [True] * (n + 1)
    sv[0] = sv[1] = False
    for i in range(2, int(n ** 0.5) + 1):
        if sv[i]:
            for j in range(i * i, n + 1, i):
                sv[j] = False
    return [i for i in range(1, n + 1) if sv[i]]

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

primes = [x for x in sieve(30_000_000 - 150) if x > 10_000_000]
for x, y in zip(primes, primes[1:]):
    if y - x == 150:
        print(y, sum(divisors(int(str(y)[1:-1]))))

Java 25


import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;

ArrayList<Integer> sieve(int lim) {

    boolean[] tmp = new boolean[lim + 1];

    for (int i = 2; i < lim + 1; i++)
        tmp[i] = true;

    for (int i = 2; i * i <= lim; i++)
        if (tmp[i])
            for (int j = i * i; j < lim + 1; j += i)
                tmp[j] = false;

    ArrayList<Integer> ans = new ArrayList<>();
    for (int i = 2; i < lim + 1; i++)
        if (tmp[i]) ans.add(i);

    return ans;
}

int sumDivisors(int n) {

    n = n % 10000000;
    n /= 10;

    Set<Integer> div = new HashSet<Integer>();
    div.add(1);
    div.add(n);

    for (int i = 2; i * i <= n; i++)
        if (n % i == 0) {
                div.add(i);
                div.add(n / i);
        }

    int s = 0;
    for (int x : div)
        s += x;

    return s;
}

void main(String args[]) {
   ArrayList<Integer> st = sieve(30000000);
   ArrayList<Integer> work = new ArrayList<>();
   for (int n : st) 
     if (n >= 10000000 && n <= 30000000) work.add(n);

   for (int i = 1; i < work.size(); i++)
        if (work.get(i) - work.get(i-1) == 150)
            System.out.println(work.get(i) + " " + sumDivisors(work.get(i)));
}

Ответ: \(12\)

Ответ:
\(13626407 \,\, 1124928\)
\(17652163 \,\, 2176902\)
\(22790507 \,\, 519126\)
\(25180471 \,\, 518048\)
\(27980987 \,\, 1383360\)

Обсуждение задания

Здесь пока нет ни одного комментария. Будьте первым!

kege1
kege2
kege3
Новый тренажёр-эмулятор
Станции КЕГЭ

Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене.

Новое видео

Методы решения задания 16 ЕГЭ по Информатике «Вычисление рекуррентных выражений»

Поддержать автора сайта!

Поддержите автора сайта, если материалы, размещённые здесь, оказались вам полезны.

Совершая донат, вы соглашаетесь с Условиями использования

Расписание пробников Статграда в 2026/27 учебном году