При решении различных задач на числа и их свойства часто возникает необходимость разложения на простые множители конкретного натурального числа.
Рассмотрим несколько способов автоматизации этой процедуры в среде электронных таблиц. Будем использовать VBA (Visual Basic for Applications – язык программирования, встроенный в линейку продуктов Microsoft Office).
1. Кнопка-макрос «Разложение на простые множители»
Файл с макросом на VBA, который выводит все простые множители данного натурального числа можно скачать
Опишем макрос. Исходим из следующих предположений. Анализируемое число вводится в ячейку А1. Результат разложения выводится в два столбика (стандартным для школьной математики способом). Первый столбик (столбец А, начиная со строки №3) – частное от деления данного числа на простые множители, начиная с самого числа до 1 включительно. Второй столбик (столбец В, начиная со строки №3) – простые множители по возрастанию. Программный код процедуры:
Макрос назвали ProstMnog. Для его вызова можно назначить «горячие клавиши», если открыть окно диалога «Макросы», нажать в нем кнопку «Параметры…» и в открывшемся окне диалога «Параметры макроса» указать комбинацию клавиш. Подразумевается, что лист книги, на котором происходят вычисления, имеет имя L1.
2. Пользовательская функция «Минимальный делитель»
Разработаем пользовательскую функцию, которая находит наименьший делитель данного натурального числа больший единицы. Это обязательно простой делитель.
Применение этой пользовательской функции позволяет провести разложение на простые множители стандартным школьным методом:
В ячейку А1 введено исходное натуральное число. В ячейке В1 вычислен наименьший делитель исходного числа. Далее в ячейке А2 рассчитан результат деления исходного числа на его минимальный делитель и снова в ячейке В2 вычислен минимальный делитель частного из ячейки А2 и так далее.
Программный код пользовательской функции «Минимальный делитель»:
Function MinDel(n As Integer) As Integer
If n < 2 Then
MinDel = 1
Else
i = 1
Do
i = i + 1
MinDel = i
Loop Until n Mod i = 0
End If
End Function
Для использования на практике этой пользовательской функции можно скачать файл, в котором эта функция сохранена или ввести ее код самостоятельно в новой книге MS Excel.
При использовании файла необходимо включить макросы – нажать кнопку «Параметры», выбрать пункт «Включить это содержимое» и нажать кнопку «Ок»
Далее можно вводить имя функции в ячейку, начиная со знака «=», программа даже будет предлагать всплывающую подсказку
Чтобы разложить конкретное натуральное число на простые множители необходимо:
- ввести это число в какую-нибудь ячейку, например, в ячейку А1
- в ячейке В1 ввести формулу =MinDel(A1)
- в ячейке А2 ввести формулу =А1/В1
- в ячейке В2 ввести формулу =MinDel(A2)
Осталось скопировать формулы во второй строке протягиванием вниз до тех пор, пока не начнут повторяться единицы
Программный код пользовательской функции можно ввести в новую книгу MS Excel самостоятельно.
Для разработки пользовательской функции в MS Excel следует сохранить книгу в формате с поддержкой макросов (*.xlsm), открыть редактор Microsoft Visual Basic (Alt+F11), в меню Insert выбрать пункт Module и ввести программный код.
Рассмотрим задание, для которого можно провести численный эксперимент с помощью описанной пользовательской функции.
Пример. «Назовем наибольшим делителем составного натурального числа его самый большой, не равный ему делитель. Наименьшим делителем назовем его самый маленький, не равный единице, делитель. Например, у числа 150 наибольший делитель равен 75, а наименьший – 2. Сколько существует различных составных натуральных чисел, у которых наибольший делитель ровно в 341 раз больше наименьшего?»
В столбце А задаем минимальный делитель, на основе которого рассчитывается натуральное число удовлетворяющее условию задачи. Для этого в столбце С рассчитан максимальный делитель, превышающий минимальный в 341 раз. В столбце D рассчитываем число как произведение минимального делителя в столбце А и максимального делителя в столбце С. У полученного числа настоящий минимальный делитель может отличаться от заданного в первом столбце, поэтому в столбце Е с помощью пользовательской функции рассчитывается действительно минимальный делитель. В столбце F проводится проверка совпадения заданного минимального делителя в столбце А и рассчитанного минимального делителя в столбце Е.
Решение представляет собой численный эксперимент, проверено всего 20 чисел. Строго говоря пока нельзя утверждать, что ответ правильный, кроме того не предъявлено строгое аналитическое решение. Но результаты расчетов помогают понять, что после 11 строки в столбце Е повторяются простые числа, не превышающие 11. Возникает предположение, что это связано с простыми делителями числа 341 = 11 × 31. Поскольку каждое число, которое делится на 341, делится и на 11, то его минимальный делитель не может превышать 11. Это рассуждение и позволяет строго обосновать ответ.