Элементы теории чисел
В прошлой статье мы уже затрагивали такое понятие, как простые числа. Сегодня я предлагаю подробнее поговорить про факторизацию числа (разложение на простые множители) и про делители числа.
Согласно основной теореме арифметики каждое натуральное число может быть представлено как произведение простых чисел. Например, число 12 мы можем представить следующим образом:
\[12 = 2 * 2 * 3\] \[12 = 2^2 * 3^1\]Таким образом, любое число можно представить в виде произведения простых множителей следующим образом:
\[x = p_1^{\alpha_1} * p_2^{\alpha_2} * \ldots * p_n^{\alpha_n} = \prod\limits_i {p_i^{\alpha_i}}\]Проверка числа на простоту
Чтобы проверить, является ли натуральное число x простым, достаточно просто проверить, существует ли в отрезке \([2;\sqrt{x}]\) число, которое делится на x. В чем смысл? Если бы существовало такое число y, что x делится на y и \(\sqrt x < y < x\), то гарантированно существовало бы и число \(z=x/y\), которое было бы меньше корня, а значит, изначального условия хватило бы для проверки на простоту.
Факторизация
Как уже упоминалось ранее - факторизация - разложение числа на простые множители. Принцип работы следующего алгоритма мало чем отличается от предыдущего - нужно перебрать все числа в промежутке \([2; \sqrt x]\), и попытаться разделить x на каждое из них по очереди.
Поиск делителей
Еще одной часто встречающейся задачей в олимпиадном программировании является поиск делителей. Под делителями числа подразумевают все числа, на которые оно делится. Так, делители 24: 1,2,3,4,6,8,12,24.