Почему я получил это [1, 2, 4, 8, 16, 1, 16, 8, 4, 2, 1]?

Путем проб и ошибок я нашел следующие строки кода Python,

for N in range(2**1,2**3):
    print [(2**n % (3*2**(2*N - n))) % (2**N-1) for n in range(2*N+1)]

которые производят следующий вывод,

[1, 2, 1, 2, 1]
[1, 2, 4, 1, 4, 2, 1]
[1, 2, 4, 8, 1, 8, 4, 2, 1]
[1, 2, 4, 8, 16, 1, 16, 8, 4, 2, 1]
[1, 2, 4, 8, 16, 32, 1, 32, 16, 8, 4, 2, 1]
[1, 2, 4, 8, 16, 32, 64, 1, 64, 32, 16, 8, 4, 2, 1]

то есть степени от 2 до 2 ** (N-1) , 1, и степени двойки меняются местами. Это именно то, что мне нужно для моей проблемы (связанные с fft и вейвлетами). Однако я не совсем уверен , почему это работает? Последняя операция по модулю, насколько я понимаю, дает 1 в середине ряда. Фактор 3 в первой операции по модулю вызывает у меня головную боль. Кто-нибудь может предложить объяснение? В частности, Какая связь между моей базой 2 и фактором 3?

7
задан lafras 30 March 2011 в 18:01
поделиться