- •Название курсовой работы
- •230201 20090207 001 Пз
- •Содержание
- •Введение
- •1. Генераторы случайных чисел
- •1.1. Линейный конгруэнтный метод
- •1.2 Метод фибоначчи
- •1.3 Метод bbs
- •1.4 Сравнительная таблица методов
- •1.5. Требования к генераторам случайных чисел
- •2. Реализации генератора последовательности случайных чисел
- •2.1. Разработка программы
- •Заключение
- •Список использованных источников
- •Приложение а
1.5. Требования к генераторам случайных чисел
Генераторы и их реализации в библиотеках подпрограмм должны удовлетворять ряду существенных требований:
Статистическая устойчивость. Значения на выходе идеального генератора должны быть равномерно распределены, а корреляции должны отсутствовать. Другими словами, все под последовательностью фиксированной длины должны иметь одну и ту же вероятность появления в последовательности, выдаваемой генератором. С практической точки зрения, последовательность псевдослучайных чисел должна пройти набор статистических тестов на равномерное распределение и независимость.
Непредсказуемость. В основном это свойство важно для криптографических алгоритмов. Требование состоит в невозможности надежно предсказать значение an+1по (a0,…,an) при помощи какого-либо полиномиального алгоритма. Здесьan – значение на выходе генератора.
Длинный период. Период генератора должен быть достаточно большим, чтобы не быть исчерпанным за месяцы компьютерного времени. Численный эксперимент на суперкомпьютере может задействовать 109случайных чисел в секунду в течение многих часов, поэтому 1013- 1016случайных чисел могут вносить вклад в результат вычислительного эксперимента.
2. Реализации генератора последовательности случайных чисел
В данной главе дается описание разработанного алгоритма решения поставленной задачи и реализация самого приложения………………………...
…………………………………………………………………………….................
2.1. Разработка программы
Основной задачей является разработка программы, которая реализует генерацию случайных чисел. Пусть заданы два простых числа и количество генерируемых чисел. На основании исходных данных необходимо получить числовую последовательность.
Для решения данной задачи использована среда программирования Microsoft Visual Studio 2010. Язык программирования – C#. Программа разработана как консольное приложение, в котором используются функции, циклы и условия. Основываясь на теоретических материалах, описанных выше, автором работыбыл методBBS.
На основании этого составляется следующий алгоритм:
Создание функции проверки является ли число простым
Создание функции проверки является ли числа взаимно простыми.
Создание главной функции, которая включает в себя:
ввод входных данных (целочисленные, большие целочисленные, временные);
организация двух массивов для хранения случайных числовых последовательностей;
генерация последовательности линейным конгруэнтным методом;
генерация последовательности методом BBS;
вывод на экран результатов программы.
Выполнение программы начинается с подключение библиотеки System.Numerics. Она позволяет работать с большими целочисленными значениями.
Переменным значениям присваиваются исходные данные, которые в последующем будут применены для решения поставленной задачи.
Функция Simpleпроверяет, являются ли числа простыми. Она предназначена для методаBBS, т.к. в линейном конгруэнтном методе отсутствует проверка исходных данных. Код функции представлен в листинге 2.1:
Листинг 2.1. Создание функции Simple |
static bool Simple(BigInteger number)
{
if (number < 2) return true;
for (BigInteger i = 2; i < number; i++)
{
if (number % i == 0) return false;
}
return true;
}
Как видно из листинга функция принимает одно значения типа BigInteger, т.е само число. При помощи массива происходит поиск делителей заданного числа. В зависимости от результата поиска возвращается значения типаbool. Если же заданные числа не соответствуют заданным параметрам, то пользователю выводится сообщение следующего типа: «Числа не простые».
Исходный код программы представлен в ПРИЛОЖЕНИИ А.
Результаты программы представлены на рисунке:
Рис. 2.1. Результат программы
По полученным результатам программы, можно сделать следующий вывод. Скорость выполнения последовательности линейным конгруэнтным методом равна 1мс. Она выше, чем у второго метода. Числа в последовательности в первом случае начинаю дублироваться с шестой позиции. Все это подтверждает теоретический материал, указанный в сравнительной таблице и демонстрирует криптографическую ненадежность метода..