Задание EGEINF19743B: Делители, маски и отбор чисел

ФИПИ · ЕГЭ · все форматы ответа · 2475 заданий

Открыть решение ↓ Ошибка или пожелание

Тип задачи: Делители, маски и отбор чисел.

Учебные темы: Алгоритмы обработки натуральных чисел, записанных в позиционных системах счисления: разбиение записи числа на отдельные цифры, нахождение суммы и произведения цифр, нахождение максимальной (минимальной) цифры. Представление числа в виде набора простых сомножителей. Алгоритм быстрого возведения в степень. Поиск простых чисел в заданном диапазоне с помощью алгоритма «решето Эратосфена».

Впишите правильный ответ.

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

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

Например, для числа 298 М = 2 + 149 = 151.

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

 

 



i
СВОЙСТВА ЗАДАНИЯ
КЭС:
3.4 Алгоритмы обработки натуральных чисел, записанных в позиционных системах счисления: разбиение записи числа на отдельные цифры, нахождение суммы и произведения цифр, нахождение максимальной (минимальной) цифры. Представление числа в виде набора простых сомножителей. Алгоритм быстрого возведения в степень. Поиск простых чисел в заданном диапазоне с помощью алгоритма «решето Эратосфена»
Тип ответа:Краткий ответ
Номер: 19743B
НЕ РЕШЕНО Ответить

Решение задания EGEINF19743B

Ответ: (5100138; 94449), (5100793; 64646), (5100976; 318813), (5101624; 57975), (5102876; 1275721)

Решение.
Требуются первые пять чисел, строго больших 5100000. Начинаем с 5100001 и рассматриваем целые n подряд в порядке возрастания.
Разложим n на простые множители. Каждый простой делитель записываем один раз, независимо от степени. Само n исключаем: если n простое, допустимых простых делителей нет и M = 0.
Пусть p — наименьший, q — наибольший из оставшихся простых делителей. Тогда M = p + q. Если простой делитель только один, минимум и максимум совпадают, поэтому M равняется удвоенному делителю; такой случай нельзя отбрасывать.
При разложении последовательно делим остаток на каждый найденный простой множитель до исчезновения его степени. Если после проверки всех p с p² ≤ остатку остаётся число больше 1, оно простое: составное число обязательно имело бы делитель не больше своего квадратного корня.
После проверки M больше 50000 сравниваем десятичную запись M с той же записью в обратном порядке. Равенство этих строк в точности означает палиндром.
n = 5100138 = 2 · 3³ · 94447.
Различные простые делители: 2, 3, 94447.
M = 2 + 94447 = 94449.
94449 больше 50000; прямая запись «94449» совпадает с обратной «94449».
n = 5100793 = 79 · 64567.
Различные простые делители: 79, 64567.
M = 79 + 64567 = 64646.
64646 больше 50000; прямая запись «64646» совпадает с обратной «64646».
n = 5100976 = 2⁴ · 318811.
Различные простые делители: 2, 318811.
M = 2 + 318811 = 318813.
318813 больше 50000; прямая запись «318813» совпадает с обратной «318813».
n = 5101624 = 2³ · 11 · 57973.
Различные простые делители: 2, 11, 57973.
M = 2 + 57973 = 57975.
57975 больше 50000; прямая запись «57975» совпадает с обратной «57975».
n = 5102876 = 2² · 1275719.
Различные простые делители: 2, 1275719.
M = 2 + 1275719 = 1275721.
1275721 больше 50000; прямая запись «1275721» совпадает с обратной «1275721».
В программе решето строит простые числа до 100000. Перебор ограничен сверху 10¹⁰, чей квадратный корень равен 100000, поэтому списка достаточно для полного разложения каждого проверяемого n и проверки простоты M. Ниже показано, что все пять результатов найдены раньше этой границы; после пятого программа сразу завершается.
Полный последовательный перебор от 5100001 до 5102876 включительно проверяет 2876 чисел. Условие выполняется ровно для пяти перечисленных n. Все меньшие допустимые кандидаты проверены, поэтому это именно первые пять чисел.
Проверка результата.
Воспроизводимая программа Python:

from math import isqrt
from operator import gt, lt

limit = 100000
flags = [True] * (limit + 1)
flags[0] = flags[1] = False
for p in range(2, isqrt(limit) + 1):
    if flags[p]:
        for multiple in range(p * p, limit + 1, p):
            flags[multiple] = False
primes = [p for p in range(2, limit + 1) if flags[p]]

def prime_divisors(n):
    rest = n
    result = []
    for p in primes:
        if gt(p * p, rest):
            break
        if rest % p == 0:
            result.append(p)
            while rest % p == 0:
                rest = divmod(rest, p)[0]
    if rest != 1:
        result.append(rest)
    return [] if result == [n] else result

def is_prime(n):
    if lt(n, 2):
        return False
    for p in primes:
        if gt(p * p, n):
            return True
        if n % p == 0:
            return False
    return True

found = 0
for n in range(5100001, 10 ** 10 + 1):
    d = prime_divisors(n)
    M = d[0] + d[-1] if d else 0
    if gt(M, 50000) and str(M) == str(M)[::-1]:
        print(n, M)
        found += 1
        if found == 5:
            break
assert found == 5

Результат: в каждой строке слева n, справа M.
5100138 — 94449
5100793 — 64646
5100976 — 318813
5101624 — 57975
5102876 — 1275721
Ответ: (5100138; 94449), (5100793; 64646), (5100976; 318813), (5101624; 57975), (5102876; 1275721).

Помочь улучшить сайт

Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании EGEINF19743B.

Сообщение увидит только команда сайта: на странице оно не публикуется.

Комментарии к решению

Комментарии видны всем посетителям сайта.

Комментариев пока нет. Будьте первым.

Чтобы оставить комментарий, войдите или зарегистрируйтесь.