Posts pythonTip 67 101位自复制数
Post
Cancel

pythonTip 67 101位自复制数

题目描述: 什么叫自复制数呢?我们看看下面的例子: 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)
This post is licensed under CC BY 4.0 by the author.
Trending Tags
Contents

pythonTip 66 排队

pythonTip 68 阶乘

Trending Tags