Я не совсем понял, как ваш код связан с вашим алгоритмом (что такое random_list?) Или как код должен быть структурирован, но я предполагаю, что это что-то похожее на это:
class Rand:
def __init__(self, n):
# Initialize an integer R to be equal to 1 every time the tabling routine is called
self.r = 1
self.n = n
def rand(self):
# On each successive call for a random number, set R = R*5
self.r *= 5
# Mask all but the lower order n+2 bits of the product and place the result in R
self.r = self.r & (pow(2, self.n)-1)
# Set P = R/4 and return
self.p = self.r/4
return self.p
Вв этом случае, чтобы заставить его работать с таблицей любого размера, класс становится следующим:
class Rand2:
def __init__(self, tableSize):
# Initialize an integer R to be equal to 1 every time the tabling routine is called
self.r = 1
self.tableSize = tableSize
def rand(self):
# On each successive call for a random number, set R = R*5
self.r *= 5
# A bit mask is essentially a modulus operation, which is what we do instead
self.r = self.r % self.tableSize
# Set P = R/4 and return
self.p = self.r/4
return self.p
Простой тест подтверждает, что результат одинаков, когда размеры таблицы идентичны:
rnd = Rand(10)
for i in range(0, 10):
print rnd.rand()
rnd2 = Rand2(pow(2, 10))
for i in range(0, 10):
print rnd2.rand()
Но, как я уже сказал, я не совсем понял, как ваш код связан с вашим алгоритмом.Я предполагаю, что tl; dr здесь использует оператор модуля вместо битовой маски.