题目描述: 什么叫自复制数呢?我们看看下面的例子: 625×625=390625 376×376=141376 9376×9376=87909376 90625×90625=8212890625 如果一个数的平方末尾还是这个数本身,那么它就是自复制数。 现在告诉你长度为101位的自复制数只有一个,你能把它找出来吗?请输出这个101位的自复制数。
示例:
90625×90625=8212890625
分析:
对于这个只有一个输出结果的,可以提前在自己电脑上面运行一下,然后直接输出就完事了。
那么问题就来了,我们要怎么运行出这个结果呢?
我们的数字平方,以数字 1234 为例:
1
2
3
4
5
6
7
8
9
1234
* 1234
-----------
4936
3702
2468
1234
-----------
1522756
我们观察一下可以看出:
结果的个位上面的数字,实际上只与个位数字有关。
结果的十位上面的数字,除了和中间运算时产生的十位有关,还与个位的进位有关,当然这里的进位为0。
结果的百位上面的数字,除了和中间运算时产生的百位有关,还与十位的进位有关,当然这里的进位为0。
结果的千位上面的数字,除了和中间运算时产生的千位有关,还与百位的进位有关,当然这里的进位为1。
依次类推。
给一组数我们来简单的分析一下:
1
2
3
4
5
6
7
8
9
10
11
12
13
6** 2= 36 WeiShu= 1
76** 2= 5776 WeiShu= 2
376** 2= 141376 WeiShu= 3
9376** 2= 87909376 WeiShu= 4
9376** 2= 87909376 WeiShu= 5
109376** 2= 11963109376 WeiShu= 6
7109376** 2= 50543227109376 WeiShu= 7
87109376** 2= 7588043387109376 WeiShu= 8
787109376** 2= 619541169787109376 WeiShu= 9
1787109376** 2= 3193759921787109376 WeiShu= 10
81787109376** 2= 6689131260081787109376 WeiShu= 11
81787109376** 2= 6689131260081787109376 WeiShu= 12
81787109376** 2= 6689131260081787109376 WeiShu= 13
另一种:
1
2
3
4
5
6
7
8
9
10
11
5** 2= 25 WeiShu= 1
25** 2= 625 WeiShu= 2
625** 2= 390625 WeiShu= 3
625** 2= 390625 WeiShu= 4
90625** 2= 8212890625 WeiShu= 5
890625** 2= 793212890625 WeiShu= 6
2890625** 2= 8355712890625 WeiShu= 7
12890625** 2= 166168212890625 WeiShu= 8
212890625** 2= 45322418212890625 WeiShu= 9
8212890625** 2= 67451572418212890625 WeiShu= 10
18212890625** 2= 331709384918212890625 WeiShu= 11
我们发现,其实 三位数是由二位数产生的,四位数是由三位数产生的,五位数是由四位数产生的。根据上面的 竖式公式进行推导。
这里给出和 6 有关的代码:
1
2
3
4
s=6
for i in range(1,101):
s=((10-s**2//(10**i)%10)%10)*10**i+s
print (s)
实际上,我们提交的时候,只需要提交下面一行代码就可以了。
代码:
1
print(96046992680891830197061490109937833490419136188999442576576769103890995893380022607743740081787109376)