Добавить в корзинуПозвонить
Найти в Дзене

Разбор номера 5227 ЕГЭ по информатике #25

Условие: № 5227 (Уровень: Сложный) (М. Ишимов) Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы: Например, маске 123*4?5 соответствуют числа 123405 и 12300405. Среди натуральных чисел, не превышающих 10**7, найдите все числа, соответствующие маске 3*52?, у которых нечётное количество делителей. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им максимальные делители, не считая самого числа. from fnmatch import *
for x in range(3520, 10**7):
if fnmatch(str(x), '3*52?'):
divisors = set()
for j in range(2, int(x ** 0.5) + 1):
if x % j == 0:
divisors.add(j)
divisors.add(x // j)
if len(divisors) % 2 != 0:
print(x, max(divisors)) Комментарии к решению: Ответ:
3143529 1047843
3175524 1587762
3200521 1789
3845521 103933
3908529 1302843 Информатика ЕГЭ | itpy 👨‍💻
Оглавление

Условие: № 5227 (Уровень: Сложный) (М. Ишимов)

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

  • символ «?» означает ровно одну произвольную цифру;
  • символ «» означает любую последовательность цифр произвольной длины; в том числе «» может задавать и пустую последовательность.

Например, маске 123*4?5 соответствуют числа 123405 и 12300405.

Среди натуральных чисел, не превышающих 10**7, найдите все числа, соответствующие маске 3*52?, у которых нечётное количество делителей.

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

-2
from fnmatch import *
for x in range(3520, 10**7):
if fnmatch(str(x), '3*52?'):
divisors = set()
for j in range(2, int(x ** 0.5) + 1):
if x % j == 0:
divisors.add(j)
divisors.add(x // j)
if len(divisors) % 2 != 0:
print(x, max(divisors))

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

  1. from fnmatch import * - Импортируем все функции из библиотеки fnmatch.
  2. for x in range(3520, 10**7): - Создаём цикл по диапазону чисел от 3520 до 10**7 (в соответствии с условием) с помощью переменной x
  3. if fnmatch(str(x), '3*52?'): - Проверяем, соответствует ли строковое представление x шаблону '3*52?', используя функции fnmatch
  4. divisors = set() - Создаём пустое множество divisors
  5. for j in range(2, int(x ** 0.5) + 1): - Пробегаем цикл по диапазону чисел от 2 до квадратного корня из x плюс 1 (используем квадратный корень, так как это значительно ускоряет выполнение программы) с помощью переменной j
  6. if x % j == 0: - Проверяем, делится ли x на j без остатка.
  7. divisors.add(j) - Добавляем j во множество divisors
  8. divisors.add(x // j) - Добавляем результат целочисленного деления x на j во множество divisors.
  9. if len(divisors) % 2 != 0: - Проверяем, является ли количество элементов в множестве divisors нечетным
  10. print(x, max(divisors)) - Выводим значение x и максимальный элемент из множества divisors

Ответ:
3143529 1047843
3175524 1587762
3200521 1789
3845521 103933
3908529 1302843

Информатика ЕГЭ | itpy 👨‍💻

Присоединяйся к нашему Телеграм каналу: t.me/informatika_kege_itpy
Присоединяйся к нашему Телеграм каналу: t.me/informatika_kege_itpy