Wake of Gods Forum | Форум Во Имя Богов

Full Version: нужна помощь по программированию
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2 3
Кто-нибудь когда-нибудь сталкивался с линейным конгруэнтным методом генерации псевдослучайных чисел?
Есть задача, реализованная на паскале:
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: [ -> ]предполагаю, что тебе может помочь обычная агрегация через указатель ("родительский/дочерний")...
сложно будет отслеживать общие вершины. думаю, должно быть что-то проще.
Лучше представь бутылку Клейна, натянутую на сферу с ручкой Sm http://www.clker.com/cliparts/1/5/3/6/12...vg.med.png - проведи здесь линию экватора.
Ну а кроме этого ничё понять невозможно.
[edit] Появились мысли: храни у каждого треугольника 3 соседей (по часовой стрелке, например) и 3 параметра вершин, ну и детей, родителя, если нужен. При разбиении смотри по каждой стороне, разбит ли сосед. Если разбит, то находи в его списке соседей себя и копируй соответствующий параметр. А именно, бери параметр у среднего подтреугольника. У него вершины должны быть упорядочены, как соседи у родителя.
Есть кто шарит по scheme?
вроде от Common Lisp не очень отличается, может помогу.
Pages: 1 2 3
Reference URL's