【发布时间】:2011-03-30 16:07:43
【问题描述】:
经过反复试验,我找到了以下几行 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 和小波相关)。但是,我不太确定 为什么 它有效?我理解的最终模运算,它提供了系列中间的 1。第一个模运算中的因子 3 让我很头疼。任何人都可以提供解释吗?具体来说,我的基数 2 和因子 3 之间的关系是什么?
【问题讨论】:
-
当我运行程序时,输出与您列出的不同。
-
不是答案,但是,既然 Python 重视清晰度,为什么不直接使用
[2**n for n in range(N)] + [1] + [2**n for n in range(N-1, -1, -1)])? -
[0, 0, 0]不能是第一个结果,因为第一个N是2,这使得range()的参数在第二行2*2+1 = 5。因此,第一个列表应该有 5 个元素。 -
[0, 0, 0] 已被删除---早期代码的残余。
-
不。输出仍然与您的源代码不匹配。 N 的范围是 2-16,所以应该有 14 个值。
标签: python algorithm language-agnostic math number-theory