gpt4 book ai didi

python - 为什么我得到这个 [1, 2, 4, 8, 16, 1, 16, 8, 4, 2, 1]?

转载 作者:太空狗 更新时间:2023-10-29 21:16:57 24 4
gpt4 key购买 nike

通过反复试验,我发现了以下几行 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 之间有什么关系?

最佳答案

首先,正如其他人所说,有更简单的实现可能,您应该使用这些实现。

但要回答您的问题,这就是您得到此结果的原因:

当 n

2n % (3*22N-n) = 2n, 因为 2n < 3*22N-n。然后2n % (2N-1) = 2n,给出预期的结果。

当n=N时:

2N % (3*22N-N) = 2N, 2N % (2N-1) = 1.

当 N

令 n = 2N - k。然后:

2n % (3*22N-n) = 22N-k % (3*2k) = 2k*(22N-2k % 3) = 2k * (4N-k % 3)

任何 4 的幂等于 1 模 3(因为 4=1(模 3),所以 4m=1m=1(模 3)为出色地)。所以最后的结果是 2k = 22N-n,符合预期。

使用其他号码:

如果您使用基数 a 而不是 2,并且使用数字 b 而不是 3,最后一部分将给您:

ak * ((a2)N-k % b)

因此您需要选择 b 为 a2-1 的任意因子,这将确保 ((a2)N-k % b) = 1 对于任何 k。

关于python - 为什么我得到这个 [1, 2, 4, 8, 16, 1, 16, 8, 4, 2, 1]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5488959/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com