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

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

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

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

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

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

Пусть М – сумма минимального и максимального простых натуральных делителей целого числа, не считая самого числа. Если таких делителей у числа нет, то значение М считается равным нулю. Напишите программу, которая перебирает целые числа, бо́льшие 8 007 494 154, в порядке возрастания и ищет среди них такие,
для которых М больше 80 000, является простым числом и в своём написании содержит последовательность цифр 567 (567 – идущие подряд друг за другом в указанном порядке цифры 5, 6 и 7) ровно один раз.

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

 

Например, для числа 49 М = 14; для числа 42 М = 9.

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

 



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

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

Ответ: (8007495062; 615679), (8007495772; 5671033), (8007531302; 856789), (8007532410; 5679103), (8007559070; 1567039)

Решение.
Требуются первые пять чисел, строго больших 8007494154. Начинаем с 8007494155 и рассматриваем целые n подряд в порядке возрастания.
Разложим n на простые множители. Каждый простой делитель записываем один раз, независимо от степени. Само n исключаем: если n простое, допустимых простых делителей нет и M = 0.
Пусть p — наименьший, q — наибольший из оставшихся простых делителей. Тогда M = p + q. Если простой делитель только один, минимум и максимум совпадают, поэтому M равняется удвоенному делителю; такой случай нельзя отбрасывать.
При разложении последовательно делим остаток на каждый найденный простой множитель до исчезновения его степени. Если после проверки всех p с p² ≤ остатку остаётся число больше 1, оно простое: составное число обязательно имело бы делитель не больше своего квадратного корня.
Проверяем три условия одновременно: M больше 80000, M простое, запись M содержит «567» ровно один раз. Простоту проверяем отсутствием простого делителя от 2 до ⌊√M⌋.
Здесь M простое и больше 2, значит оно нечётное. Сумма двух нечётных простых чётна, поэтому наименьший простой делитель подходящего n равен 2. Это дополнительно проверяет все найденные строки. Перебор программы всё равно включает и чётные, и нечётные n.
n = 8007495062 = 2 · 7 · 929 · 615677.
Различные простые делители: 2, 7, 929, 615677.
M = 2 + 615677 = 615679.
615679 больше 80000; «567» встречается ровно один раз. Среди простых чисел от 2 до 784 делителей M нет, поэтому M простое.
n = 8007495772 = 2² · 353 · 5671031.
Различные простые делители: 2, 353, 5671031.
M = 2 + 5671031 = 5671033.
5671033 больше 80000; «567» встречается ровно один раз. Среди простых чисел от 2 до 2381 делителей M нет, поэтому M простое.
n = 8007531302 = 2 · 4673 · 856787.
Различные простые делители: 2, 4673, 856787.
M = 2 + 856787 = 856789.
856789 больше 80000; «567» встречается ровно один раз. Среди простых чисел от 2 до 925 делителей M нет, поэтому M простое.
n = 8007532410 = 2 · 3 · 5 · 47 · 5679101.
Различные простые делители: 2, 3, 5, 47, 5679101.
M = 2 + 5679101 = 5679103.
5679103 больше 80000; «567» встречается ровно один раз. Среди простых чисел от 2 до 2383 делителей M нет, поэтому M простое.
n = 8007559070 = 2 · 5 · 7 · 73 · 1567037.
Различные простые делители: 2, 5, 7, 73, 1567037.
M = 2 + 1567037 = 1567039.
1567039 больше 80000; «567» встречается ровно один раз. Среди простых чисел от 2 до 1251 делителей M нет, поэтому M простое.
В программе решето строит простые числа до 100000. Перебор ограничен сверху 10¹⁰, чей квадратный корень равен 100000, поэтому списка достаточно для полного разложения каждого проверяемого n и проверки простоты M. Ниже показано, что все пять результатов найдены раньше этой границы; после пятого программа сразу завершается.
Полный последовательный перебор от 8007494155 до 8007559070 включительно проверяет 64916 чисел. Условие выполняется ровно для пяти перечисленных 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(8007494155, 10 ** 10 + 1):
    d = prime_divisors(n)
    M = d[0] + d[-1] if d else 0
    if gt(M, 80000) and str(M).count('567') == 1 and is_prime(M):
        print(n, M)
        found += 1
        if found == 5:
            break
assert found == 5

Результат: в каждой строке слева n, справа M.
8007495062 — 615679
8007495772 — 5671033
8007531302 — 856789
8007532410 — 5679103
8007559070 — 1567039
Ответ: (8007495062; 615679), (8007495772; 5671033), (8007531302; 856789), (8007532410; 5679103), (8007559070; 1567039).

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

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

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

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

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

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

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