Задание EGEINF6EDEDF: Самостоятельное написание алгоритма

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

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

Тип задачи: Самостоятельное написание алгоритма.

Учебные темы: Язык программирования (Паскаль, Python, Java, C++, C#). Типы данных: целочисленные, вещественные, символьные, логические. Ветвления. Сложные условия. Циклы с условием. Циклы по переменной. Обработка данных, хранящихся в файлах. Текстовые и двоичные файлы. Файловые переменные (файловые указатели). Чтение из файла. Запись в файл. Разбиение задачи на подзадачи. Подпрограммы (процедуры и функции). Использование стандартной библиотеки языка программирования; Обработка символьных данных. Встроенные функции языка программирования для обработки символьных строк. Алгоритмы обработки символьных строк: подсчёт количества появлений символа в строке, разбиение строки на слова по пробельным символам, поиск подстроки внутри данной строки, замена найденной подстроки на другую строку. Генерация всех слов в некотором алфавите, удовлетворяющих заданным ограничениям. Преобразование числа в символьную строку и обратно.

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

Напишите программу, которая перебирает целые числа, бо́льшие 2 018 974 447, в порядке возрастания и ищет среди них числа, представленные в виде произведения ровно двух простых множителей, не обязательно различных, каждый из которых ровно один раз содержит в своей записи 43 (43 – идущие подряд друг
за другом в указанном порядке цифры 4 и 3).

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

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

 



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

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

Ответ: 2018977769 27143; 2018980091 9437; 2018983349 643; 2018997619 43; 2019003907 4643

Решение.
Перебираем целые числа строго больше 2018974447, начиная с 2018974448. Для каждого числа n надо проверить, что n = p · q, где p и q простые, а запись каждого из них содержит «43» ровно один раз.
Множители могут совпадать. Поэтому квадрат простого числа допускается, если запись самого простого множителя удовлетворяет условию. Число с тремя простыми множителями, даже с повторениями, не подходит.
Находим наименьший делитель p числа n, начиная с 2. Проверять делители достаточно, пока p² не больше n: у составного числа обязательно есть делитель не больше квадратного корня. Если такой делитель не найден, n простое и не подходит.
Первый найденный делитель p обязательно прост: иначе его собственный меньший делитель делил бы и n. Вычисляем целое q = divmod(n, p)[0]. Проверка простоты q теперь гарантирует, что у n ровно два простых множителя с учётом повторений.
Подсчёт str(p).count('43') и str(q).count('43') должен дать 1 в обоих случаях. Проверяем записи множителей, а не запись n. Так как p — наименьший делитель, p <= q; во второй столбец нужен наименьший множитель, поэтому выводим p.
Программа на Python. Целочисленное частное получаем через divmod; второй элемент результата этой функции здесь равен нулю.

def prime(x):
    if x < 2:
        return False
    d = 2
    while d * d <= x:
        if x % d == 0:
            return False
        d += 1
    return True

n = 2018974447
found = 0
while found < 5:
    n += 1
    p = 2
    while p * p <= n and n % p != 0:
        p += 1
    if p * p > n:
        continue
    q = divmod(n, p)[0]
    if prime(q) and str(p).count('43') == 1 and str(q).count('43') == 1:
        print(n, p)
        found += 1

Проверка найденных чисел:

npqПроверка произведенияВо второй столбец
2018977769271437438327143 · 74383 = 201897776927143
201898009194372139439437 · 213943 = 20189800919437
20189833496433139943643 · 3139943 = 2018983349643
2018997619434695343343 · 46953433 = 201899761943
201900390746434348494643 · 434849 = 20190039074643

Каждый p и q в таблице прошёл проверку отсутствия делителей от 2 до своего квадратного корня включительно. В каждой записи «43» встречается ровно один раз. Показанные произведения восстанавливают исходные числа.
Полнота перебора: программа проверяет каждое целое число от 2018974448 до 2019003907, всего 29460 чисел. В этом диапазоне условию удовлетворяют ровно пять строк таблицы. Счётчик увеличивается только после всех проверок, а цикл останавливается на пятом результате. Поэтому строки идут по возрастанию и более раннее подходящее число не пропущено.
В ответ переносим только первый и последний столбцы проверочной таблицы, по одной паре в строку.
Ответ: 2018977769 27143; 2018980091 9437; 2018983349 643; 2018997619 43; 2019003907 4643.

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

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

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

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

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

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

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