首页 > 解决方案 > 诺依曼发电机计数

问题描述

   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)

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

标签: python-3.x

解决方案


这是实现伪随机数生成器 的中间平方方法。

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

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


推荐阅读