Tent
Posts: 429
|
Кто-нибудь когда-нибудь сталкивался с линейным конгруэнтным методом генерации псевдослучайных чисел?
Есть задача, реализованная на паскале:
Code:
Program _1;
var
a,c:integer; n,i,m,x,xo:longint;
function f(x:longint):longint; {vichislenie znacheniya chlena posledovatelnosti}
begin
f:=(a*x+c) mod m;
end;
function item(N:longint):longint; {vichislenire poslednego chlena posledovatelnosti}
begin
x:=xo;
for i:=1 to N do x:=f(x);
item:=x;
end;
function Period(xx:longint):longint; {vischislenie perioda}
var q:byte;
begin
q:=0;
x:=xo;
i:=0;
repeat
If x=xx then inc(q);
x:=f(x);
if q>0 then inc(i);
until q=2;
period:=i;
end;
Begin
writeln('vvedite kol-vo elementov');
readln(N);
xo:=5;
a:=4149;
m:=131074;
c:=27700;
writeln('x[',N,']= ',item(n));
writeln('It period is: ',period(item(n)));
readln;
End.
Требуется вычислить такие значения коэффициентов m,c,a, при которых период ГСПЧ будет наибольшим. Вернее, вычисленые-то они уже имеются, но это взято из интернетов, где ни глянь - везде пишут нечто вроде "данные значения коэффициентов вычислены различными исследователям и являются наиболее приемлемыми для генерации максимального периода". А мне надо доказать, что именно эти значения, а не другие. Соответственно, надо вычислить множество значений, визуализировать (построить график). Как - описывается во втором томе у Кнута, но для меня это крайне сложно и запутано. Может кто-нибудь сможет объяснить более доступно? Буду очень признателен
|
|
17.06.2011 16:18 |
|