python源代码中冲突解决公式的一个谜题

python源代码中冲突解决公式的一个谜题,python,Python,我很抱歉在这里问这样的问题,尽管它看起来有点像数学问题 以下冲突解决公式出现在python源代码中,\pythoncore\Objects\dictobject.c j = ((5*j) + 1) mod 2**i 对于范围(2*i)内的任何初始j,此公式的简要说明为,重复2*i次可生成每个值 整数在范围(2*i)内正好一次。在一个 这个例子太小了,不能完全清楚地说明这一点 大小2*3索引的顺序为: 0 -> 1 -> 6 -> 7 -> 4 -> 5 ->

我很抱歉在这里问这样的问题,尽管它看起来有点像数学问题

以下冲突解决公式出现在python源代码中,\pythoncore\Objects\dictobject.c

j = ((5*j) + 1) mod 2**i
对于范围(2*i)内的任何初始j,此公式的简要说明为,重复2*i次可生成每个值 整数在范围(2*i)内正好一次。在一个 这个例子太小了,不能完全清楚地说明这一点 大小2*3索引的顺序为:

0 -> 1 -> 6 -> 7 -> 4 -> 5 -> 2 -> 3 -> 0 [and here it's repeating]

我的问题是如何证明这种公式的正确性。

您所指的注释包含说明

有关证明,请参阅随机数生成的任何文本

如果你搜索一下,你会发现
5*j+1 mod 2**i
循环是一个错误。线性同余生成器的形式为

x_(n+1) = a*x_n + c (mod m)
对于非零c,线性同余生成器具有全周期(生成所有数mod m)当且仅当

  • c和m是相对素数
  • a-1可被m的所有素数因子整除,且
  • 如果m是4的倍数,则a-1也是4的倍数
  • 这就是赫尔-多贝尔定理。所有这些条件都适用于
    5*j+1 mod 2**i
    ,因此循环将遍历哈希表中的所有条目


    可以找到赫尔-多贝尔定理的完整证明。

    您所指的注释包含说明

    有关证明,请参阅随机数生成的任何文本

    如果你搜索一下,你会发现
    5*j+1 mod 2**i
    循环是一个错误。线性同余生成器的形式为

    x_(n+1) = a*x_n + c (mod m)
    
    对于非零c,线性同余生成器具有全周期(生成所有数mod m)当且仅当

  • c和m是相对素数
  • a-1可被m的所有素数因子整除,且
  • 如果m是4的倍数,则a-1也是4的倍数
  • 这就是赫尔-多贝尔定理。所有这些条件都适用于
    5*j+1 mod 2**i
    ,因此循环将遍历哈希表中的所有条目


    可以找到赫尔-多贝尔定理的完整证明。

    也许你应该在math.stackexchange.com上发布这篇文章