介绍
的中间方法用于伪随机数的产生。但是,这在实践中不是一个好方法,因为它的周期通常很短并且存在一些严重的缺点。这是如何运作的?让我们举个例子:
对于种子,我们选择123456
:
Seed 123456
种子平方(种子×种子)等于:
Seed² 15241383936
我们以6位数字开头。这意味着种子平方应交付12位数字。如果不是这种情况,则添加前导零以补偿:
Seed² 015241383936
然后,我们取数字的中间部分,其大小与种子的大小相同:
Seed² 015241383936
^^^^^^
这是我们的新种子:241383
。我们重复与上述相同的过程。我们得到以下内容:
0: 123456
015241383936
| |
1: 241383
058265752689
| |
2: 265752
070624125504
| |
3: 624125
389532015625
| |
4: 532015
283039960225
| |
5: 039960
001596801600
| |
6: 596801
这会持续一段时间……现在我们知道中间平方方法是什么,让我们开始挑战吧:
任务
每个种子都有一个时期。n位种子的周期不能大于8 n。例如,种子82
。这将给出以下顺序:
82 > 72 > 18 > 32 > 02 > 00 > 00 > 00 > 00 > 00
|____|____|____|____|____|____|____|____|____|___...
0 1 2 3 4 5 6 7 8 9
您可以看到周期等于5,然后再次包含相同的数字。您的任务是,当给定大于0的种子且不包含前导零时,输出种子的周期。因此,在这种情况下,您需要输出5
。
另一个示例是:24
,它给出了以下内容:
24 > 57 > 24
|____|____|___...
0 1 2
如您所见,并非所有序列都以结尾0
。此周期的周期为1。
测试用例
Input > Output
24 > 1
82 > 5
123456 > 146
8989 > 68
789987 > 226
与用于序列pastebins 123456,8989,789987
这是代码高尔夫球,因此以最少的字节提交为准!
您可以假设输入永远不会有不均匀的数字。
24
是周期性的(我说周期2),最终82
是周期性的(周期1)。