Более эффективный способ написать этот простой генератор непоследовательных чисел Python? - PullRequest
1 голос
/ 07 июня 2011

Есть ли более эффективный способ написать это, чтобы он не зацикливался от 1 до n (который висит на n == 2 ** 32):

def ns_num(n, seed, modulo, incrementor):
    assert n < modulo

    current = seed # some start value
    for i in xrange(1, n):
        current = (current + incrementor) % modulo

    return current

print ns_num(5, 3250, 87178291199, 17180131327)
print ns_num(2**32, 3250, 87178291199, 17180131327)

1 Ответ

7 голосов
/ 07 июня 2011

Это то же самое, что и

return (seed + (n - 1) * incrementor) % modulo

(Вы уверены, что хотите n - 1? Это то, что делает ваш текущий код.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...