Вычисление сверхбольших чисел вида M=a^p, в том числе чисел Мерсенна и чисел Евклида
Назначение: Программа предназначена для вычисления сверхбольших чисел вида Mp = ap, представляемых в памяти ЭВМ линейными динамическими массивами. При этом показатель степени p может принимать значение порядка 40-100 млн и более.
Область применения: В теории чисел известны числа Мерсенна вида Mp = 2p-1 и числа Евклида вида Mn = 2n-1 *(2n-1). Программа может использоваться при определении сверхбольших чисел Мерсенна, чисел Евклида, простых чисел, при определении закономерности распределения простых чисел. Также программа может использоваться в теоретической физике, при тестировании мощности вычислительных систем.
Используемый алгоритм: В программе реализован алгоритм, разработанный автором. Пользователь вводит показатель степени двойки для вычисления числа Мерсенна. Алгоритм предусматривает максимальное использование ранее вычисленных значений степени двойки, которые можно использовать в соответствии с правилом сложения степеней. Способ умножения этих значений в виде линейных динамических массивов описан в программе "Ускоренное умножение сверхбольших чисел" (зарегистрировано в Каталоге ФАП, номер PR12011). Пользователю предоставляется возможность внести имя файла бинарного типа, в котором хранится ранее вычисленное значение числа с меньшей степенью двойки. Значение считывается в линейный динамический массив в виде последовательности десятичных цифр, начиная с разряда единиц. Значение степени двойки, которое пользователь вводил в начале выполнения программы будет больше, чем у считанного из бинарного файла числа, поэтому определяется их разность - как значение недостающей степени. Далее, уже без участия пользователя, алгоритм предусматривает вторую возможность использования ранее вычисленных значений степеней двойки, которые хранятся в бинарных файлах с соответствующими именами. Циклически можно использовать значения со степенями 1000, 10 000, 100 000 и 1 млн. В программе можно предусмотреть и другие заготовки степеней двойки, например 2^10 млн. Когда до заданной пользователем степени остается значение меньше 1000, то предварительно сформированное значение циклически умножается на 2 необходимое количество раз, например 999 раз, что для современных процессоров выполняется достаточно быстро. Высокая скорость выполнения расчетов в предлагаемой программе обеспечивается двумя факторами: максимальное использование ранее вычисленных значений степеней двойки; многократное использование в ходе вычислений умножения по алгоритму "Ускоренное умножение сверхбольших чисел" (PR12011). Конечные результаты вычислений чисел Мерсенна и чисел Евклида формируюся в виде динамических линейных массивов, эти значения сохраняются в бинарных и текстовых файлах. Значения, сохраненные в бинарных файлах, можно в последующем использовать для вычисления еще больших степеней двойки, что похоже на восхождение на большую высоту с ранее достигнутого места по разновеликим ступенькам лестницы.
Функциональные возможности: Функциональные возможности могут быть ограничены размером свободной динамической памяти ЭВМ. В представленном во вложении листинге программы предусматривается разрядность формируемых чисел порядка 100 млн, что намного превышает разрядность самых больших известных простых чисел Мерсенна с разрядностью до 15 млн.
Инструментальные средства создания: Microsoft Visual Studio 2010, Visual C++.
Тип реализующей ЭВМ IBM PC
Вид и версия операционной системы Microsoft Windows
Язык программирования C++, объем программы 592 Кбайт.
Вложение | Размер |
---|---|
listing_programmy_mersenn2_arial.doc | 99.5 КБ |