ФИПИ · ЕГЭ · все форматы ответа · 2475 заданий
Тип задачи: Самостоятельное написание алгоритма.
Учебные темы: Язык программирования (Паскаль, Python, Java, C++, C#). Типы данных: целочисленные, вещественные, символьные, логические. Ветвления. Сложные условия. Циклы с условием. Циклы по переменной. Обработка данных, хранящихся в файлах. Текстовые и двоичные файлы. Файловые переменные (файловые указатели). Чтение из файла. Запись в файл. Разбиение задачи на подзадачи. Подпрограммы (процедуры и функции). Использование стандартной библиотеки языка программирования; Обработка символьных данных. Встроенные функции языка программирования для обработки символьных строк. Алгоритмы обработки символьных строк: подсчёт количества появлений символа в строке, разбиение строки на слова по пробельным символам, поиск подстроки внутри данной строки, замена найденной подстроки на другую строку. Генерация всех слов в некотором алфавите, удовлетворяющих заданным ограничениям. Преобразование числа в символьную строку и обратно.
| КЭС: | 3.4 Алгоритмы обработки натуральных чисел, записанных в позиционных системах счисления: разбиение записи числа на отдельные цифры, нахождение суммы и произведения цифр, нахождение максимальной (минимальной) цифры. Представление числа в виде набора простых сомножителей. Алгоритм быстрого возведения в степень. Поиск простых чисел в заданном диапазоне с помощью алгоритма «решето Эратосфена» |
| Тип ответа: | Краткий ответ |
Ответ: 2626696861 6793; 2626700987 1567; 2626704089 167; 2626711691 2267; 2626713493 67
Решение.
Перебираем целые числа строго больше 2626695891, начиная с 2626695892. Для каждого числа n надо проверить, что n = p · q, где p и q простые, а запись каждого из них содержит «67» ровно один раз.
Множители могут совпадать. Поэтому квадрат простого числа допускается, если запись самого простого множителя удовлетворяет условию. Число с тремя простыми множителями, даже с повторениями, не подходит.
Находим наименьший делитель p числа n, начиная с 2. Проверять делители достаточно, пока p² не больше n: у составного числа обязательно есть делитель не больше квадратного корня. Если такой делитель не найден, n простое и не подходит.
Первый найденный делитель p обязательно прост: иначе его собственный меньший делитель делил бы и n. Вычисляем целое q = divmod(n, p)[0]. Проверка простоты q теперь гарантирует, что у n ровно два простых множителя с учётом повторений.
Подсчёт str(p).count('67') и str(q).count('67') должен дать 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 = 2626695891
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('67') == 1 and str(q).count('67') == 1:
print(n, p)
found += 1Проверка найденных чисел:
| n | p | q | Проверка произведения | Во второй столбец |
|---|---|---|---|---|
| 2626696861 | 6793 | 386677 | 6793 · 386677 = 2626696861 | 6793 |
| 2626700987 | 1567 | 1676261 | 1567 · 1676261 = 2626700987 | 1567 |
| 2626704089 | 167 | 15728767 | 167 · 15728767 = 2626704089 | 167 |
| 2626711691 | 2267 | 1158673 | 2267 · 1158673 = 2626711691 | 2267 |
| 2626713493 | 67 | 39204679 | 67 · 39204679 = 2626713493 | 67 |
Каждый p и q в таблице прошёл проверку отсутствия делителей от 2 до своего квадратного корня включительно. В каждой записи «67» встречается ровно один раз. Показанные произведения восстанавливают исходные числа.
Полнота перебора: программа проверяет каждое целое число от 2626695892 до 2626713493, всего 17602 чисел. В этом диапазоне условию удовлетворяют ровно пять строк таблицы. Счётчик увеличивается только после всех проверок, а цикл останавливается на пятом результате. Поэтому строки идут по возрастанию и более раннее подходящее число не пропущено.
В ответ переносим только первый и последний столбцы проверочной таблицы, по одной паре в строку.
Ответ: 2626696861 6793; 2626700987 1567; 2626704089 167; 2626711691 2267; 2626713493 67.
Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании EGEINFCA8FA9.
Сообщение увидит только команда сайта: на странице оно не публикуется.
Комментарии к решению
Комментарии видны всем посетителям сайта.
Комментариев пока нет. Будьте первым.
Чтобы оставить комментарий, войдите или зарегистрируйтесь.