
- •Курсовая работа
- •Задание
- •Введение
- •Области применения случайных чисел
- •Генератор случайных чисел
- •Детерминированные гпсч
- •Гпсч с источником энтропии или гсч
- •Аппаратные гпсч
- •Генерирование равномерно распределённых случайных чисел
- •Линейный конгруэнтный метод
- •Получение псевдослучайных чисел на основе полиномиального счетчика (сдвигового регистра)
- •Алгоритм Блюма, Блюма и Шуба (Blum Blum Shub, bbs)
- •Критерии случайности Статистические параметры
- •Частотный тест
- •Проверка по критерию «хи-квадрат»
- •Приложение 1
- •Приложение 2
- •Заключение
- •Список используемой литературы
Приложение 1
Реализация линейного конгруэнтного метода на C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static int reccur(int a, int c, int x0, int m, int x)
{
Console.WriteLine((a * x + c) % m);
if (x == x0)
{
return x0;
}
else return (a * reccur(a, c, x0, m, x - 1) + c) % m;
}
static void Main(string[] args)
{
int x0, a, c, m;
Console.Write("X0= ");
x0 = Convert.ToInt32(Console.ReadLine());
Console.Write("c= ");
c = Convert.ToInt32(Console.ReadLine());
Console.Write("a= ");
a = Convert.ToInt32(Console.ReadLine());
Console.Write("m= ");
m = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("-------------------------");
reccur(a, c, x0, m, 50);
Console.WriteLine("-------------------------");
}
}
}
Приложение 2
Реализация алгоритма Блюма, Блюма и Шуба на C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
long p = Convert.ToInt32(Console.ReadLine());
long q = Convert.ToInt32(Console.ReadLine());
int n = Convert.ToInt32(Console.ReadLine());
int x0 = Convert.ToInt32(Console.ReadLine());
long M = p * q;
Console.WriteLine("------------------");
for (int i = n; i < (n + 10); i++)
{
double xn = Math.Pow(x0, (Math.Pow(2, i)) % ((p - 1) * (q - 1))) % M;
double xk = Math.Pow(xn, 2) % M;
Console.WriteLine(xk);
}
Console.WriteLine("-------------------");
}
}
}
Заключение
В курсовой работе было объяснено, как работает линейный конгруэнтный метод (который чаще всего используется в функции random), и метод получения случайных чисел с помощью полиномиального счётчика (который часто используется для тестирования аппаратуры).
Выяснили, что генерировать случайные числа нужно только с равномерным законом распределения, т.к. все остальные распределения можно получить из равномерного путём преобразований, известных из теории вероятности.
Был написан генератор псевдослучайных чисел с помощью линейного конгруэнтного метода.
Узнали, что только генераторы энтропии могут давать по-настоящему случайные числа. Но, к сожалению, они довольно дороги, и не представляется возможным установить их в каждый ПК. Именно поэтому и возникла необходимость в алгоритмах получения случайных чисел.
Список используемой литературы
Кнут Д.Э. Искусство программирования, том 2. Получисленные алгоритмы. – 3-е изд. – М.: Вильямс, 2001. – 832 с.
Макконнелл Дж. Анализ алгоритмов. Активный обучающий подход. – 3-е изд. – М.: Техносфера, 2009. – 416 с.
Павловская Т.А. C#. Программирование на языке высокого уровня: учебник для вузов. - Спб: Питер, 2010.-432с.
http://ru.wikipedia.org/wiki/Алгоритм_Блюма_—_Блюма_—_Шуба