Статья Автор: Лебедев Дмитрий

И всё же ... Как решать задание типа 25 КЕГЭ

Вопросы какого сорта попадают в эти задания?
  1.  Найти несколько чисел больших.... таких, что среди их делителей есть ...
  2.  Среди натуральных чисел, не превышающих ..., найти все числа, удовлетворяющие маске ... и делящиеся на ....
  3. Пусть М - сумма минимального и максимального натуральных делителей числа ...  Найдите числа превышающие ..., для которых М удовлетворяет ... 
Ничего другого пока не было, хотя в авторских заданиях бывает такое, что без "основной теоремы арифметики" не разобраться.
Получается, что достаточно уметь написать  "условно оптимальную" программу получения множества делителей числа и научиться проверять соответствие числа маске (желательно уметь делать это без библиотек) !?
Правда, иозникает вопрос - А почему это это задание "высоко уровня сложности", на решение которого отводиться 20 минут?
Прежде, чем искать ответ на этот вопрос,  определимся со стандартным подходом к решению заданий типа 25

 

Решим следующую проблему:
  • найдите все делители числа N 
Для решения вспомним, что если:
  • x - делитель N, то и N/x тоже делитель N  и  \(N = x\cdot\frac{N}{x}\)
  • для двух любых чисел x, y  -  \(x \leq y \ или\ y\leq x\)  
значит, если \(N = x\cdot y, x\leq y,\ то\ x\cdot x \leq N \)
Эти простые утверждения позволяют позволяют написать стандартную подпрограмму, находящую все делители числа и их свойства


Этот код можно назвать "стадартным", поскольку он помогает решить большинство заданий.
Использование множества позволяет избежать проблем с "квадратами" и позволяет производить поиск делителей "сверху вниз"
Рассмотрим пример задания :
Рассмотрим произвольное натуральное число, представим его всеми возможными способами в виде произведения двух натуральных чисел и найдём для каждого такого произведения разность сомножителей. Например, для числа 18 получим: 18 = 18*1 = 9*2 = 6*3, множество разностей содержит числа 17, 7 и 3. Подходящей будем называть пару сомножителей, разность между которыми не превышает 90.
Найдите все натуральные числа, принадлежащие отрезку [500000; 1000000], у которых есть не менее трёх подходящих пар сомножителей. В ответе перечислите найденные числа в порядке возрастания, справа от каждого запишите наибольший из всех сомножителей, образующих подходящие пары.
Для решения такого задания достаточно немного модифицировать  подпрограмму поиска делителей:
  • проверять делители не с нуля, а с "корня из N"
  • записывать в список не делители, а сразу пару делителей
  • прекращать работу программы как только "станет понятно, что дальше искать не надо"
 
 


В чем же недостаток этого "стандартного" решения?
Такой "прямолинейный" подход не стоит применять, если 
  • надо найти делители чисел вида pk, поскольку вынуждена перебирать значения до pk/2
  • найти  все простые делители числа
  • проверять большие числа на простоту
Вряд ли, с помощью это подхода, стоит решать и задание следующего типа:
 Найдите все натуральные числа, принадлежащие отрезку [525784203; 728943762] и имеющие ровно пять делителей.
Для каждого найденного числа запишите в ответе само число и его наименьший простой делитель.
Найденные числа расположите в порядке возрастания.
Для решения этого и других возможных версий заданий необходимо понимание следствий из основной теоремы арифметики
(это также полезно для решения заданий типа 19 из профильной математики)
Основные свойста следующие:
Если  \(N = P_1^{a_1}\cdot . . . \cdot P_k^{a_k},\ где\ все\ P_i - \ различные\ простые\ числа, a_i > 0 \),  то
  • число  \(\Huge{\sigma}_{\large0}\large (N) = (a_1+1)\cdot(a_2+1)\cdot . . . \cdot(a_k+1)\) равно количеству всех делителей числа. 
  • число: \(\Huge{\sigma}_{\large1}\large (N) = \frac{(P_1^{a_1+1}-1)}{p_1-1}\cdot\frac{(P_2^{a_2+1}-1)}{p_2-1}\cdot . . .\cdot\frac{(P_k^{a_k+1}-1)}{p_k-1}\) равно сумме всех делителей числа
Про вычисление этих чисел  можно см. здесь
Несколько несложных следствий:
  • Число N есть квадрат (N = n2) тогда и только тогда, количество его делителей есть нечётное число;
  • Если количесто делителей числа N есть простое число k, то N есть k-1 степень простого числа ( N = Pk-1 )
  • Если N = 2M, то количество нечётных делителей у чисел N, M одинаковое
Задача. Натуральное число делится на 4, но не делится на 8. Докажите, что сумма его делителей делится на 7
(используйте формулу для суммы делителей и предстваление любого числа в виде 2m*A (A  - нечётное)
.

 
 

Вернемся к заданию
Найдите все натуральные числа, принадлежащие отрезку [525784203; 728943762] и имеющие ровно пять делителей.
Для каждого найденного числа запишите в ответе само число и его наименьший простой делитель.
Найденные числа расположите в порядке возрастания.
Надо найти все число с 5 делителями, а такие могут быть только числами вида P4, где P - простое. 
Теперь решение не предствляет труда:
  • надо перебрать все простые числа из отрезка  [525784203**0.25; 728943762**0.25]
  • для каждого простого числа P вывести P4 и P 


Рассмотрим задания с масками и требованием делимости
Демоверсия 2025
Среди натуральных чисел, не превышающих 1010, найдите все числа, 
соответствующие маске 3?12?14*5, делящиеся на 1917 без остатка.
Возможные подходы к решению:
  1. Перебрать все числа кратные 1917 и проверить на соответствие маске - 
    - таких чисел не менее 5*106 (точнее 1010 /1917), перебрать можно 
  2.  Перебрать все число, соответствующие маске  -
    в числе не менее 8 знаков и не более 10 и 6 знаков известны - это порядка 10чисел
Будем считать, что не знаем о существовании различных модулей и должны предложить решение без использования import
Каким способом воспользоваться? Первый подход (через кратность) более простой. 
Для его реализации запишем минимальное число A, соответствующее маске ... A =30120145 (? заменили на 0, про * "забыли)
Теперь надо
  • найти "близкое" к A число, которое будет кратно 1917 (например: A - A%1917 или т.п.).
  • перебрать все "следующие" кратные 1917 и проверять их на маску


Код получился простым, но и маска была простая. (Да и переберать можно было до 4*109)
А если в маске будет пара "звездочек"?
Среди натуральных чисел, не превышающих 1010, найдите все числа, 
соответствующие маске ?27*27*2?7, делящиеся на 1917 без остатка.
Усложняется проверка на маску, поскольку надо проверить наличие 27 в середине, а не на "краях"
Сделать это несложно, если задать вопрос "какому срезу соответствует *27*?
  • начинается срез с позиции 3
  • заканчивается перед -3
значит задается как [3 : -3] surprise
 


В демоверсии 2025 представлен еще один вариант задания
Пусть M – сумма минимального и максимального натуральных делителей целого числа, не считая единицы и самого числа.
Если таких делителей у числа нет, то считаем значение M равным нулю.
Напишите программу, которая перебирает целые числа, большие 800 000, 
в порядке возрастания и ищет среди них такие, для которых M оканчивается на 4.
В ответе запишите пять найденных чисел в порядке возрастания и соответствующие им значения M.
Стандартный подход поможет быстро решить задание


Что может быть на экзамене?
Не трудно придумать "страшные" задания на тему делителей, например:
  • про маски на делители, а не на число
  • про количество нечётных/чётных делителей
  • про суммы всех делителей  
  • и т.п. 
в относительно несложном варианте их можно/нужно ждать на экзамене (и не только по информатике surprise)
Вот пример задания из сборника ФИПИ по математике (задание 19)
Трёхзначное число A имеет k  натуральных делителей (в том числе 1 и A).
а) Может ли   быть равно 7?
б) Может ли k  быть равно 25?
в) Найдите  наибольшее k .

 
Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать