python – 为什么我得到这个[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,并且2的幂被反转.这正是我对我的问题所需要的(fft和wavelet相关).但是,我不太清楚为什么会这样?我理解的最终模运算,它提供了系列中间的1.第一个模运算中的因子3令我头疼.任何人都可以提供解释吗?具体来说,我的基数2和因子3之间的关系是什么?

最佳答案