Статистически оптимальный генератор псевдослучайных последовательностей

Свойства равномерно распределенной псевдослучайной последовательности. Линейный и квадратичный конгруэнтный генератор. Исследование RSA-алгоритма генерации псевдослучайных последовательностей. Универсальный алгоритм статистического тестирования Маурера.

Рубрика Математика
Вид дипломная работа
Язык русский
Дата добавления 06.11.2011
Размер файла 2,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

start = clock();

for( ; ; )

{

k = rand();

iNod = NOD(k,fi);

if(iNod == 1)

break;

}

finish = clock();

tmp = (double)(finish - start)/100;

printf("Time4 =\t%1.5f (sec)\n", tmp/CLOCKS_PER_SEC);

u0= rand();

cout<<"INput n: ";

cin>> n;

start = clock();

iPrev = u0;

for(i=0; i<n; i++)

{

iNext.setpowmod(iPrev,k,N);

iPrev = iNext;

iNext %= 2;

file_opn<<iNext<<" ";

}

finish = clock();

tmp = (double)(finish - start)/100;

printf("Time5 =\t%1.5f (sec)\n", tmp/CLOCKS_PER_SEC);

return 0;

}

Сдвиговый регистр

int plusmod2(int a, int b)

{

int res;

if (((a == 0)&&(b == 1))||((a == 1)&&(b == 0)))

res = 1;

else

res = 0;

return res;

}

int main()

{

int *reg;

int *out;

int iTemp;

int i,n,j,k=20000;

int razr = 29;

int count0 = 0;

int count1 = 0;

ofstream file_opn;

file_opn.open("SQ_shift.txt");

cout<<" Input num of sq(n>20000): ";

cin>>n;

reg = new int[razr];

out = new int[n];

for(i=0; i<razr; i++)

{

if(i == (razr-1))

reg[i] = 1;

else

reg[i] = 0;

}

for(i=0; i<n; i++)

{

out[i] = reg[0];

iTemp = plusmod2(reg[0],reg[1]);

for(j=0; j<razr; j++)

reg[j] = reg[j+1];

reg[razr] = iTemp;

}

for(i=k; i<n; i++)

{

file_opn<<out[i]<<" ";

}

for(i=0; i<n; i++)

{

if(out[i] == 0)

count0++;

else

count1++;

}

cout<<"\n";

cout<<"Num of 0: "<<count0;

cout<<"Num of 1: "<<count1;

return 0;

}

Самоуправляемый 2-линейный регистр сдвига.

int main()

{

int i,j,k,in,out,num,tmp;

int m = 31;

int sq[31][31];

ofstream file_opn;

file_opn.open("SQ_2shift.txt");

srand(time(NULL));

for(i=0; i<m; i++)

{

for(j=0; j<m; j++)

sq[i][j] = rand()%4;

}

cout<<"Input length of sq: ";

cin>>num;

for(k=0; k<num; k++)

{

if(sq[0][2] == 0)

in = 0;

if(sq[0][2] == 1)

in = 1;

if(sq[0][2] == 2)

in = 0;

if(sq[0][2] == 3)

in = 1;

if(in == 0)

{

for(i=0; i<m-1; i++)

{

tmp = sq[i][30];

sq[i][30] = sq[i][0];

for(j=0; j<m-1; j++)

{

if(j == 29)

sq[i][j] = tmp;

else

sq[i][j] = sq[i][j+1];

}

}

}

else

{

for(j=0; j<m-1; j++)

{

tmp = sq[30][j];

sq[30][j] = sq[0][j];

for(i=0; i<m-1; i++)

{

if(i == 29)

sq[i][j] = tmp;

else

sq[i][j] = sq[i+1][j];

}

}

}

if(sq[29][28] == 0)

out = 0;

if(sq[29][28] == 1)

out = 0;

if(sq[29][28] == 2)

out = 1;

if(sq[29][28] == 3)

out = 1;

file_opn<<out<<" ";

}

return 0;

}

Тест n-серий

const double table_hi[2][15] ={{0.01,0.025,0.05,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,0.95,0.975,0.99},

{0.1148,0.2158,0.3518,0.5844,1.0052,1.4237,1.8692,2.3660,2.9462,3.6649,4.6416,6.2514,7.8147,9.3484,11.3449}};

int main()

{

int N = 500;

int M = N/2;

int i,j,k=0;

int len=0;

int n = 4; //число степеней свободы

int iV[4];

double p0j;

int *sq;

int **sqi;

int **V; // частота попадания

int *Vk;

int pairs[2][4];

double hi_kv = 0;

double itmp;

double alfa = 0.05; //уровень значимости (5%, 1%, 0.1%);

sqi = new int*[2];

sqi[0] = new int[M];

sqi[1] = new int[M];

V = new int*[2];

V[0] = new int[M];

V[1] = new int[M];

sq = new int[N];

Vk = new int[N];

pairs[0][0] = 0;

pairs[1][0] = 0;

pairs[0][1] = 0;

pairs[1][1] = 1;

pairs[0][2] = 1;

pairs[1][2] = 0;

pairs[0][3] = 1;

pairs[1][3] = 1;

char* file_name = "SQ_2shift.txt";

FILE *in;

in=fopen(file_name,"r");

if(in==NULL )

printf("\nIncorrect input file\n");

for(i=0; i<N; i++)

{

fscanf(in,"%d",&sq[i]);

len++;

}

for(i=0; i<N; i++)

cout<<sq[i]<<" ";

// сам тест

p0j = 1/(pow(N,2)); // вероятность появления пары чисел, квадрат - тк они могут местами меняться.

for(i=0; i<M; i++)

{

for(j=0; j<2; j++)

{

sqi[j][i] = sq[k];

k++;

}

}

for(i=0; i<4; i++)

iV[i] = 0;

for(i=0; i<M; i++)

{

for(j=0; j<4; j++)

{

if((sqi[0][i] == pairs[0][j])&&(sqi[1][i] == pairs[1][j]))

iV[j]++;

}

}

cout<<"Chislo sovpadenii par: "<<"\n";

for(i=0; i<4; i++)

{

cout<<iV[i]<<"\n";

}

// вычисляем хи-квадрат статистику

itmp = (double)M/n;

for(j=0; j<4; j++)

hi_kv = hi_kv + pow((iV[j] - itmp),2)/itmp;

cout<<"Statistika hi-kvadrat : "<<hi_kv<<" ";

for(i=0; i<15; i++)

{

if(table_hi[0][i] == (1-alfa))

{

if(table_hi[1][i] > hi_kv)

cout<<"\nPrinimaem gipotezy o raspredelenii na yrovne znachimossti alfa = 5%\n";

else

cout<<"\nOtvergaem gipotezy o raspredelenii\n";

}

}

return 0;

}

Обобщенный статистический тест Маурера.

int main()

{

int L = 8;

int Q = 1500;

int K = 128000;

int N;

int i,j,k,count;

int *sq,*A,**y;

//int y[129500][8];

double eps = 0.05; // уровень значимости теста 5%

double Feps = 1.960; // квантиль уровня eps/2

double t1, t2;

double Funi,mt_t,mt,C,D,D_t,sigma;

char* file_name = "SQ_rsa.txt";

FILE *in;

in=fopen(file_name,"r");

if(in==NULL )

printf("\nIncorrect input file\n");

N = (Q+K)*L;

sq = new int[N];

for(i=0; i<N; i++)

fscanf(in,"%d",&sq[i]);

// Вычисляем Ai

k = 0;

y = new int*[8];

y[0] = new int[K+Q];

y[1] = new int[K+Q];

y[2] = new int[K+Q];

y[3] = new int[K+Q];

y[4] = new int[K+Q];

y[5] = new int[K+Q];

y[6] = new int[K+Q];

y[7] = new int[K+Q];

for(i=0; i<Q+K; i++)

{

for(j=0; j<8; j++)

{

y[j][i] = sq[k];

k++;

}

}

A = new int[N];

for(i=Q+1; i<Q+K+1; i++)

{

for(j=i-1; j>=0; j--)

{

count = 0;

for(k=0; k<8; k++)

{

if(y[k][j] == y[k][i])

count++;

if(count == 8)

A[i] = i-j;

else

A[i] = i;

}

if(count == 8)

break;

}

}

// Вычисляем статистику

Funi = 0;

for(i = Q+1; i<Q+K+1; i++)

Funi = Funi + log(A[i])/(K*log(2));

cout<<"Statistica(mera sgimaemosti): "<<Funi;

// Мат. ожидание

mt_t = 0;

mt = 0;

for(i=1; i<Q+1; i++)

{

mt_t = pow((1 - pow(2,(-1)*L)),(i-1))*log(i)/log(2);

mt = mt + mt_t;

}

mt = mt*pow(2,(-1)*L);

cout<<"\nMatematicheskoe ogidanie: "<<mt;

//Дисперсия

C = 0.6; // для K>>2^L С близко к 0,6 для L = 8;

D = 0;

D_t = 0;

for(i=1; i<Q+1; i++)

D_t = D_t + pow((1-pow(2,(-1)*L)),(i-1))*pow(log(i)/log(2),2);

D_t = D_t*pow(2,(-1)*L);

D = D_t - pow(mt,2);

sigma = sqrt(D/K)*C;

cout<<"\nSrednekvadraticheskoe otklonenie: "<<sigma;

t1 = mt + sigma*Feps;

t2 = mt - sigma*Feps;

if((Funi > t2)&&(Funi < t1))

cout<<"\nPrinimaem gipotezy o raspredelenii na yrovne znachimosti 5%.\n";

else

cout<<"\n Otvergaem gipotezy. ";

cout<<"\nInterval [t2 t1]"<<"["<<t2<<" "<<t1<<"]";

return 0;

}

Критерий серий

int main()

{

int i,iSeries,n1,n2;

int N=500; // размер последовательности

int *sq;

double eps = 0.05;

double Up = 1.960;

double Zv,tmp,tmp2,tmp3;

sq = new int[N];

char* file_name = "SQ_2shift.txt";

FILE *in;

in=fopen(file_name,"r");

if(in==NULL )

printf("\nIncorrect input file\n");

for(i=0; i<N; i++)

{

fscanf(in,"%d",&sq[i]);

}

cout<<"SQ: ";

for(i=0; i<N; i++)

cout<<sq[i]<<" ";

iSeries = 0;

for(i=1; i<N+1; i++)

{

if(sq[i] == sq[i-1])

continue;

else

iSeries++;

}

n1 = 0;

n2 = 0;

for(i=0; i<N; i++)

{

if(sq[i] == 0)

n1++;

else

n2++;

}

cout<<"\nKolichestvo serii: "<<iSeries;

cout<<"\n";

cout<<"\n kolichestvo 0: "<<n1;

cout<<"\n";

cout<<"\n kolichestvo 1: "<<n2;

cout<<"\n";

tmp = 2*n1*n2/pow((n1+n2),2);

tmp2 = (double)iSeries - (double)2*n1*n2/(n1+n2) - 1;

if(tmp2 > 0)

tmp3 = tmp2;

else

tmp3 = tmp2*(-1);

Zv = (tmp3 - 0.5)/sqrt((tmp*((double)2*n1*n2 - (double)(n1 + n2))/(n1+n2-1)));

cout<<"Statistica test: "<<Zv;

if(Zv < Up)

cout<<"\nPrinimaem gipotezy o raspredelenii.\n";

else

cout<<"Otvergaem gipotezy\n";

return 0;

}

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

1. Харин Ю.С., Берник В.И., Матвеев Г.В., Агиевич С.В. "Математические и компьютерные основы криптологии" - Мн.: Новое знание, 2003

2. Евтушенко Ю.Г., Мазурик В.П. "Программное обеспечение систем оптимизации" - М.: Знание, 1989

3. Белов А.А., Баллод Б.А., Елизарова Н.Н. "Теория вероятностей и математическая статистика" - Ростов н/Д: Феникс, 2008.

4. Нечаев А.А. "Мультирегистры сдвига и сложность мультипоследовательностей",Труды по дискретной математике - М: Физматлит, 2003 - Т.6.

5. Ефимов А.В., Поспелов А.С., Земсков В.Н "Сборник задач по математике для ВТУЗОВ", ч.4 - М: Физматлит, 2004

6. Кнут Д.Э. "Искусство программирования", т.2 - М.: "Вильямс", 2007

7. Лидл Р., Нидеррайтер Г. "Конечные поля" - М.: Мир, 1988.

8. Ивченко Г.И., Медведев Ю.И. "Математическая статистика", - М: "Высшая школа", 1984

Размещено на Allbest.ru


Подобные документы

  • Обобщенные циклотомические последовательности. Цикломатические числа и их свойства. Метод расчета линейной сложности обобщенных циклотомических последовательностей. Примеры вычисления линейной сложности двоичных последовательностей с периодами.

    курсовая работа [797,5 K], добавлен 13.06.2013

  • Рассмотрение некоторых числовых последовательностей, заданных рекуррентно, их свойств и задач с ними связанных. Теория возвратных последовательностей. Свойства последовательности Фибоначчи и ее золотое сечение. Исследование последовательности Каталана.

    реферат [812,1 K], добавлен 03.05.2015

  • Способы получения псевдослучайных чисел. Общая характеристика генератора псевдослучайных чисел фон Неймана. Сущность равномерного закона распределения. Понятие о критериях согласия. Анализ критериев Пирсона и Колмогорова.

    курсовая работа [176,9 K], добавлен 28.04.2010

  • Понятие математического моделирования: выбор чисел случайным образом и их применение. Критерий частот, серий, интервалов, разбиений, перестановок, монотонности, конфликтов. Метод середины квадратов. Линейный конгруэнтный метод. Проверка случайных чисел.

    контрольная работа [55,5 K], добавлен 16.02.2015

  • Математическое обоснование алгоритма вычисления интеграла. Принцип работы метода Монте–Карло. Применение данного метода для вычисления n–мерного интеграла. Алгоритм расчета интеграла. Генератор псевдослучайных чисел применительно к методу Монте–Карло.

    курсовая работа [100,4 K], добавлен 12.05.2009

  • Понятие и история формирования категории "последовательность", ее значение в современной математике. Свойства и аналитическое задание последовательности, роль в развитии других областей знания. Решение задач на вычисление пределов последовательностей.

    презентация [665,0 K], добавлен 17.03.2017

  • Члены последовательности и их изображение на числовой оси. Виды последовательностей (ограниченная, возрастающая, убывающая, сходящаяся, расходящаяся), их практические примеры. Определение и геометрический смысл предела числовой последовательности.

    презентация [78,9 K], добавлен 21.09.2013

  • Вычисление математических последовательностей и определение числа, которое называется пределом последовательности. Методы расчетов предела функции. Произведение бесконечно малой функции и ограниченной функции. Определение предела последовательности.

    контрольная работа [114,0 K], добавлен 17.12.2010

  • Сходимость последовательностей случайных величин и вероятностных распределений. Метод характеристических функций. Проверка статистических гипотез и выполнение центральной предельной теоремы для заданных последовательностей независимых случайных величин.

    курсовая работа [364,8 K], добавлен 13.11.2012

  • Понятие возрастающей числовой последовательности. Формула бинома Ньютона. Число положительных слагаемых. Определение ограниченности последовательности чисел. Предел монотонной и ограниченной последовательностей. Показательный рост или убывание.

    презентация [87,1 K], добавлен 21.09.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.