Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая по алгоритмам. Случайные числа.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
98.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), и метод получения случайных чисел с помощью полиномиального счётчика (который часто используется для тестирования аппаратуры).

Выяснили, что генерировать случайные числа нужно только с равномерным законом распределения, т.к. все остальные распределения можно получить из равномерного путём преобразований, известных из теории вероятности.

Был написан генератор псевдослучайных чисел с помощью линейного конгруэнтного метода.

Узнали, что только генераторы энтропии могут давать по-настоящему случайные числа. Но, к сожалению, они довольно дороги, и не представляется возможным установить их в каждый ПК. Именно поэтому и возникла необходимость в алгоритмах получения случайных чисел.

Список используемой литературы

  1. Кнут Д.Э. Искусство программирования, том 2. Получисленные алгоритмы. – 3-е изд. – М.: Вильямс, 2001. – 832 с.

  2. Макконнелл Дж. Анализ алгоритмов. Активный обучающий подход. – 3-е изд. – М.: Техносфера, 2009. – 416 с.

  3. Павловская Т.А. C#. Программирование на языке высокого уровня: учебник для вузов. - Спб: Питер, 2010.-432с.

  4. http://ru.wikipedia.org/wiki/Алгоритм_Блюма_—_Блюма_—_Шуба

22