Обход

From
Max Alekseyev (2:5015/60)
To
Valery Krigan
Date
2000-03-01T20:31:54Z
Area
RU.ALGORITHMS
Hi, Valery !

Replying to a message of Valery Krigan to All:

 VK> Задача: перебрать без повторения все числа из большого
 VK> интервала в порядке, "похожем" на случайный.
 VK> Комментарий: _большой_ значит невозможность
 VK> запоминания _всех_ уже использованных чисел.

================================= Алгоритмы ==================================
   From: Max Alekseyev                   2:5015/60       05 Aug 1998  23:04:22
     To: Oleg Koulaboukhov        
   Subj: Точки                                                                  
==============================================================================
Hi, Oleg !

Replying to a message of Oleg Koulaboukhov to All:

 OK> Дан экран. Как его можно закрыть точками в псевдопроизвольном порядке,
 OK> не попадая на одну и ту же точку? Есть формула? Т.е. чтобы циклом от
 OK> 1 до 1000000 y меня беспорядочно точками было закрыто поле 1000х1000?
 OK> Использование супермассива исключено.

Рассмотрим первое простое большее 1000000. Это число n=1000003. Числа 
1,2,...,1000000 будем рассматривать как элементы поля F_n=Z/nZ. Рассмотрим 
произвольный первообразный корень, например, k=148569. Соответственно, числа 
k^1,k^2,k^3,...,k^1000002 дают все числа от 1 до 1000002 в каком-то 
псевдослучайном порядке.

Итак, если пропустить всякие заумные слова, берешь n=1000003, k=148569 и строишь 
следующую рекуррентную последовательность

x_1=k, 
x_{i+1}=x_i*k mod n

Получаешь последовательность чисел x_1, x_2, ..., x_{1000002}, в которой только 
2 "плохих" числа: 1000001 и 1000002 (которые ты просто игнорируешь), а все 
остальные - это как раз числа от 1 до 1000000 в некотором псевдослучайном 
порядке.

Regards,      °°
        Max    ~
==============================================================================

Regards,      °°
        Max    ~

--- OS/2 Uptime:  0d 0h 52m 29s 39ms
 * Origin: Девушка, у Вас большая грудь - Вы далеко пойдете... (2:5015/60)