Previous Page  3 / 25 Next Page
Information
Show Menu
Previous Page 3 / 25 Next Page
Page Background

А.Ф. Деон, Ю.А. Меняев

88

ISSN 0236-3933. Вестник МГТУ им. Н.Э. Баумана. Сер. Приборостроение. 2017. № 2

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

x[i] = ( a * x[i - 1] + c ) % m;

NN++; // общее число последовательностей

if ( Repeating(x, N) ) continue; // повтор

Console.WriteLine( "a = {0} c = {1}", a, c );

r++; // номер последовательности

Console.Write( "r = {0,4} ", r );

qWrite("x = ", x, N, true);

}

Console.WriteLine( "Finish" );

Console.WriteLine( "NN = {0}", NN );

double CC = (double)r / NN; // конгруэнтная полнота

Console.WriteLine("CC = r / NN = {0:F4}", CC);

Console.ReadKey(); // просмотр результата

}

//---------------------------------------------------------------

static bool Repeating ( int[] x, int N )

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

for ( int j = 0; j < i; j++ )

if ( x[i] == x[j] ) return true; // повторение

return false; // повторений нет

}

//---------------------------------------------------------------

static void qWrite ( string text, int[] x, int N,

bool newstr )

{ Console.Write( text );

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

Console.Write( "{0,3}", x[i] );

if ( newstr ) Console.WriteLine();

}

После выполнения этой программы на мониторе появляется следующий

листинг, который приводим с некоторыми сокращениями, ставя прочерк на

месте пропущенных строк

N = 8

a = 1 c = 1

r = 1 x = 1 2 3 4 5 6 7 0

r = 2 x = 2 3 4 5 6 7 0 1

− − − − −

a = 5 c = 1

r = 29 x = 1 6 7 4 5 2 3 0

r = 30 x = 2 3 0 1 6 7 4 5

− − − − −

a = 5 c = 7

r = 55 x = 6 5 0 7 2 1 4 3

a = 5 c = 7

r = 56 x = 7 2 1 4 3 6 5 0

Finish

NN = 392

CC = r / NN = 0.1429

Листинг показывает, что наблюдалось только 56 равномерных последователь-

ностей из возможных 392 конгруэнтных последовательностей во всех диапазонах