Кто-нибудь когда-нибудь сталкивался с линейным конгруэнтным методом генерации псевдослучайных чисел?
Есть задача, реализованная на паскале:
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, при которых период ГСПЧ будет наибольшим. Вернее, вычисленые-то они уже имеются, но это взято из интернетов, где ни глянь - везде пишут нечто вроде "данные значения коэффициентов вычислены различными исследователям и являются наиболее приемлемыми для генерации максимального периода". А мне надо доказать, что именно эти значения, а не другие. Соответственно, надо вычислить множество значений, визуализировать (построить график). Как - описывается во втором томе у Кнута, но для меня это крайне сложно и запутано. Может кто-нибудь сможет объяснить более доступно? Буду очень признателен
В районе дней двух читал статью на хабре о ГПСЧ. Попробуй поискать.
Эта?
Если да - в ней нет ничего, что мне могло бы помочь.
Quote:— c и m должны быть взаимно простыми,
— a-1 должно быть кратно p для всех простых делителей p числа m,
— если m кратно 4 (а в нашем случае оно будет кратно), то и a-1 должно быть кратно 4.
На основании этих свойств можно вычислить и c и a (при условии если m взять равной, например, (2^32)-1), но для этого нужно брать просто огромнейшее количество значений c и a, и смотреть как при этом будет меняться период
(17.06.2011 17:30)Tent Wrote: [ -> ]при условии если m взять равной, например, (2^32)-1
Думаю, ты имел в виду просто 2^32
есть папка C:\temp
каждый день в ней создается подпапка (иногда создаем 2-3 подпапки, например в понедельник за сб и вс), куда мы скидываем служебные файлы,
Code:
....
\4000
\4001
\4002
....
\4038
папки старше месяца удаляем
Как можно получить номер самой свежей (не по дате создания, а
по номеру)
подпапки?
в данной ситуации это будет число 4038
мне это надо для одной процедуры в VisualBasic - для ворда
спасибо
Решение на другом форуме мне подсказал Shaidar Haran.
Code:
LastFolder = ""
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder("C:\Temp")
For Each SubFolder In Folder.SubFolders
If IsNumeric(SubFolder.Name) Then
If (SubFolder.Name > LastFolder) Then LastFolder = SubFolder.Name
End If
Next
MsgBox LastFolder
Изрук, тут вряд ли кто знает VB, увы... Я вот, с ним вообще не знаком.
помогите выбрать структуру данных. суть такова:
сфера разделена на 8 равных треугольников (сферических). каждый тр-к рекурсивно (с заданной глубиной) разделен на 4 тр-ка. в процессе к 6 изначальным точкам добавляются новые точки на ребрах треугольника. таким образом точки являются общими для соседних треугольников. при этом в каждой точке есть параметр (случайное число), который не может быть получен отдельно для каждого треугольника при делении. в чем можно хранить эти параметры, чтобы можно было узнать параметры вершин произвольного треугольника?
gamecreator Wrote:сфера разделена на 8 равных треугольников (сферических)
Эта фраза сломала мне мозг.
Я совершенно не понял постановку задачи - но предполагаю, что тебе может помочь обычная агрегация через указатель ("родительский/дочерний")...
(26.09.2012 08:18)Efrit Wrote: [ -> ]Эта фраза сломала мне мозг.
ну представь октаэдр натянутый на сферу
(26.09.2012 08:18)Efrit Wrote: [ -> ]предполагаю, что тебе может помочь обычная агрегация через указатель ("родительский/дочерний")...
сложно будет отслеживать общие вершины. думаю, должно быть что-то проще.
Лучше представь бутылку Клейна, натянутую на сферу с ручкой
http://www.clker.com/cliparts/1/5/3/6/12...vg.med.png - проведи здесь линию экватора.
Ну а кроме этого ничё понять невозможно.
[edit] Появились мысли: храни у каждого треугольника 3 соседей (по часовой стрелке, например) и 3 параметра вершин, ну и детей, родителя, если нужен. При разбиении смотри по каждой стороне, разбит ли сосед. Если разбит, то находи в его списке соседей себя и копируй соответствующий параметр. А именно, бери параметр у среднего подтреугольника. У него вершины должны быть упорядочены, как соседи у родителя.
Есть кто шарит по scheme?
вроде от Common Lisp не очень отличается, может помогу.