Python 3.x 诺依曼';s发生器计数

Python 3.x 诺依曼';s发生器计数,python-3.x,Python 3.x,它应该给出达到其实际值所需的计数数,但我无法获得输出这是实现伪随机数生成器的关键 “中间平方”方法的一个问题是,所有序列最终都会重复它们自己。正如您所发现的,您的代码可能不会因某些输入而终止。您的示例中的8096输入最终会将您发送到一个6100->2100->4100->8100->6100循环,而不会事先再次访问8096 这里的无限循环不是代码的问题,而是底层算法的问题。您确定这在数学上是正确的吗?其中random最终会再次成为与num相同的值?您的代码没有终止的事实告诉我它可能没有终止。检查

它应该给出达到其实际值所需的计数数,但我无法获得输出

这是实现伪随机数生成器的关键

“中间平方”方法的一个问题是,所有序列最终都会重复它们自己。正如您所发现的,您的代码可能不会因某些输入而终止。您的示例中的8096输入最终会将您发送到一个6100->2100->4100->8100->6100循环,而不会事先再次访问8096


这里的无限循环不是代码的问题,而是底层算法的问题。

您确定这在数学上是正确的吗?其中
random
最终会再次成为与
num
相同的值?您的代码没有终止的事实告诉我它可能没有终止。检查此链接,“random=(random//100)%10000”这将截断“random=pow(random,2)”中的值,除了您的答案之外:Averill Law的模拟建模和分析第7章中给出了对PRNG的合理彻底处理。这从冯·诺依曼的中平方法开始,然后讨论更复杂的方法。
   list1=[8096, 5368, 3416 ,8963, 751, 6239 ,886, 3488, 2519, 1855, 2026 ,1461, 4587]
    for num in list1:
        random=pow(num,2)
        count=0
        equal=0
        while True:
            random = (random // 100) % 10000
            count+=1
            if random==num:
                break
            else:
                random=pow(random,2)
        print(count)