Python辅助解决数学问题——一个数的数字平方和

    科技2025-07-23  8

    Python辅助解决数学问题—— 一个数的数字平方和

    一、源头二、python的简单验证1. 对任意一个正整数的试验操作2. 对任意一个100以内的正整数的试验操作 三、探究进入1循环的数值规律1. 从“01”,“10”的路径考虑:2. 从“100”的路径考虑:3. 从“130”的路径考虑: 四、总结

    一、源头

    我们从任何一个正整数开始,比如说9246,求出它的各位数字的平方和(81+4+16+36=137),再对这个数做同样的事情(137给出1+9+49=59),并且对每次所得结果重复这一步骤,这样便得到一个整数序列。对于我们的例子,这个序列是: 9246,137,59,106,37,58,89,145,42,20,…那么,不论开始时人们选取什么整数,所得到的序列,要么出现数1(而在1之后显然就永远重复这个数字),要么出现数4(而在4之后就一直循环出现4,16,37,58,89,145,42,20)。——源自《数学中的智巧》—R·亨斯贝尔格我们知道,一旦求和到1,接下来就是一直是1,循环。一旦求和到4,那就是“4,16,37,58,89,145,42,20,4”*的循环圈。

    二、python的简单验证

    1. 对任意一个正整数的试验操作

    a = input("请输入一个数:") sum = 0 for i in range(10000): # 预设10000次循环(够用,即使数值各个位上都是最大的数字9,这个n位数在第一次操作后就会变为81n,位数骤降😆) for j in range(len(str(a))): m = str(a)[j] sum = int(m) *int(m) + sum print(sum) if sum == 1: print("到1开始循环了") break elif sum == 4: print("到4开始循环了") break else: a = sum sum = 0

    任意输入一个数值:

    请输入一个数:2617829 239 94 97 130 10 11开始循环了 请输入一个数:36653728 232 17 50 25 29 85 89 145 42 20 44开始循环了

    2. 对任意一个100以内的正整数的试验操作

    为了更清晰地看到数字的循环规律,我们不妨对100以内的数值进行分析,看看哪些数值能够进入“1循环”,哪些数值能够进入“4循环圈”。

    将进入“1循环”的数值找出来,代码如下: sum = 0 for k in range(1,101): sum = 0 a = k for i in range(10000): for j in range(len(str(a))): m = str(a)[j] sum = int(m) *int(m) + sum if sum == 4: break else: if sum == 1: print(k,"到1了") break else: a = sum sum = 0

    运行结果:

    11711011311912312813113214414916817017918218619119419711001了 将进入“4循环圈”的数值找出来,代码如下: sum = 0 for k in range(1,101): sum = 0 a = k for i in range(10000): for j in range(len(str(a))): m = str(a)[j] sum = int(m) *int(m) + sum if sum == 4: print(k, "到4了") break else: if sum == 1: break else: a = sum sum = 0

    运行结果:

    24344454648494114124144154164174184204214224244254264274294304334344354364374384394404414424434454464474484504514524534544554564574584594604614624634644654664674694714724734744754764774784804814834844854874884894904924934954964984994

    三、探究进入1循环的数值规律

    通过运行程序,我们知道[1,100]的正整数中,循环到1的有1,7,10,13,19,23,28,31,32,44,49,68,70,79,82,86,91,94,97,100,20个数。

    如何通过规律把这20个数有理有据地找出来呢?

    首先,① 对于正整数1,10,100,毫无疑问,一定是指向1循环的; ② 若一个两位数最终指向1,那么这个两位数调换个位和十位的数值后,也会指向1.

    参照费马二平方定理的操作思路: 5 = 1 2 + 2 2 5=1^{2}+2^{2} 5=12+22 13 = 2 2 + 3 2 13=2^{2}+3^{2} 13=22+32 17 = 1 2 + 4 2 17=1^{2}+4^{2} 17=12+42 * 当然,以上引例是基于费马二平方素数,也就是一个素数为两个整数的平方和且两个整数均为素数,即素数F=XX+YY,X,Y皆为素数时,F就是费马二平方素数。基于以上思路以及①②两个规律,我们分别从下面👇这几个路径入手,找寻这些数值的规律——逆向思考1,10,100,可以为哪两个数的平方和,进而不断推出进入“1循环”的正整数。

    1. 从“01”,“10”的路径考虑:

    ①… 哪两个正整数的平方和等于10? 10 = 1 2 + 3 2 . 10=1^{2}+3^{2}. 10=12+32. 于是13,31,是指向1的,再来思考13: ②…哪两个正整数的平方和等于13? 13 = 2 2 + 3 2 . 13=2^{2}+3^{2}. 13=22+32. 于是23,32,是指向1的,再来思考32: ③… 哪两个正整数的平方和等于32? 32 = 4 2 + 4 2 . 32=4^{2}+4^{2}. 32=42+42. 于是44,是指向1的.

    由此,从10(或者01)出发的路径,我们可以找到1,10,13,31,23,32,44,七个数值。

    2. 从“100”的路径考虑:

    ①… 哪两个正整数的平方和等于100? 100 = 6 2 + 8 2 . 100=6^{2}+8^{2}. 100=62+82. 于是68,86,是指向1的,再来思考68: ②…哪两个正整数的平方和等于68? 68 = 2 2 + 8 2 . 68=2^{2}+8^{2}. 68=22+82. 于是28,82,是指向1的,再来思考82: ③… 哪两个正整数的平方和等于82? 82 = 1 2 + 9 2 . 82=1^{2}+9^{2}. 82=12+92. 于是19,91,是指向1的.

    由此,从100出发的路径,我们可以找到68,86,28,82,19,91,100,七个数值。

    我们发现 —— 从以上路径出发,我们已经找到了14个数值了,其实还有一个角度被我们忽略了,100以内的正整数,两个数值的平方和最大时,是个位数字与十位数字是9的时候,也就是99,此时平方和是162,也就是说我们还要思考当100<平方和<162的情况,从以上分析中,有“13”这个两位数,那么指向13和指向130的数值,最终都将指向1。为什么只考虑13后面加一个0呢?因为除了13和1以外,👆上面我们论证出的任何指向1的数值,比如19 ,在后面加一个0后,都不在100<平方和<162的范围内,也就是都不会是两位数的平方和。于是我们又有了第三个路径。

    3. 从“130”的路径考虑:

    ①… 哪两个正整数的平方和等于130? 130 = 7 2 + 9 2 . 130=7^{2}+9^{2}. 130=72+92. 于是79,97,是指向1的,再来思考97: ②…哪两个正整数的平方和等于97? 97 = 4 2 + 9 2 . 97=4^{2}+9^{2}. 97=42+92. 于是49,94,是指向1的,再来思考49: ③… 哪两个整数的平方和等于49? 49 = 0 2 + 7 2 . 49=0^{2}+7^{2}. 49=02+72. 于是7(可以理解为07),70,是指向1的.

    由此,从130出发的路径,我们可以找到79,97,49,94,7,70,六个数值。

    四、总结

    这样看,100以内的正整数中,最终落入1循环的20个数值,就让我们通过逆向思维都找出来了。是不是很神奇?其实理解这个问题不必要求读者具备很深的数学修养,而是重在考察其“找规律”、“做数学”的习惯和品质。虽不需要多少专门知识,但也极少有人一眼就能看出里面的各类关系,所以平凡如我们,就要备好纸和笔,动一番脑筋才成🤔🤔。
    Processed: 0.012, SQL: 8