Курсовая работа: Генерирование псевдослучайных чисел на примере создания игры Сапер
Рекомендуются следующие значения: a = 55, b = 24; a = 17, b = 5;
a = 97, b = 33.
Алгоритм Блюма, Блюма и Шуба (Blum Blum Shub, BBS)
Предложен в 1986 году Ленор и Мануэлем Блюм и Майклом Шубом.
BBS заключается в применении формулы (4):
xn +1 = (xn )2 mod M (4)
где M=p*q является произведением двух больших простых p и q.
На каждом шаге алгоритма выходные данные получаются из xn путём взятия либо бита чётности, либо одного или больше наименее значимых бит xn.
Два простых числа, p и q, должны быть оба сравнимы с 3 по модулю 4 и НОД(φ(p-1), φ(q-1)) должен быть мал.
Интересной особенностью этого алгоритма является то, что для получения xn необязательно вычислять все n - 1 предыдущих чисел, если известно начальное состояние генератора x0 и числа p и q. n-ное значение может быть вычислено "напрямую" используя формулу (5):
xn = x0 (2 ^ n) mod ((p-1)(q-1)) mod M (5)
Вихрь Мерсенна (Mersennetwister)
Разработан в 1997 японскими учёными Макото Мацумото и Такудзи Нисимура. Он обеспечивает быструю генерацию высококачественных псевдослучайных чисел, так как изначально был разработан с учётом ошибок, найденных в других алгоритмах.
Существуют по меньшей мере два общих варианта алгоритма, различающихся только размером использующегося простого числа Мерсенна. Новейший и наиболее распространённый называется Mersenne Twister MT 19937.
MT 19937 имеет следующие ожидаемые свойства:
1. Он был разработан с целью иметь огромный период, размером 219937 − 1.
2. Он имеет высокий порядок пространственного эквираспространения.
3. Он значительно быстрее, чем все остальные генераторы, за исключением статистически-дефектных генераторов.
4. Он статистически случаен во всех выходных битах.
Генерирование случайных чисел с помощью класса Random в С#.
Чтобы сгенерировать последовательность псевдослучайных чисел, используется класс Random. Начало такой последовательности определяется некоторым начальным числом, которое автоматически предоставляется классом Random или задается явным образом.
В классе Random определены следующие два конструктора:
public Random()
public Random(int seed)
С помощью первой версии конструктора создается объект класса Random, который для вычисления начального числа последовательности случайных чисел использует системное время. При использовании второй версии конструктора начальное число задается в параметре seed.
Класс Random (сокращено)
//Конструкторы
Random ()
Random(int а);