平方数数字和

Sun, 26th January 2020Edit on Github计算

简介

mathe于2008年7月提出:

一个平方数的数字之和必然是9的倍数或模3余1. 那么请问,是否对于每个9的倍数或模3余1的正整数,都存在一个完全平方数,数字之和是这个正整数 比如7模3余1,完全平方数16的数字之和为7.

此外,对于每个9的倍数或模3余1的正整数x,如果存在完全平方数,数字之和是x,请找出满足条件的最小的平方数S(x), 如 x=1, S=1 x=4, S=4 x=7, S=16 x=9, S=9 x=10, S=64 x=13, S=49 x=16,S=169 X=18,S=576 ... 那么比如对于x=49,S是多少?x=100呢?

计算进展

gxqcn在一个多小时后就发现
A067178:
1, 4, 16, 9, 64, 49, 169, 576, 289, 1849, 4489, 3969, 17956, 6889, 27889, 69696, 98596, 97969, 499849, 1887876, 698896, 2778889, 4999696, 9696996, 19998784, 46689889, 66699889, 79869969, 277788889, 478996996, 876988996, 3679999569, 1749999889, ... 所以我们得出x=49时S=2778889=16672S=2778889=1667^2.
而且mathe发现序列的注释中已经有人计算到了85,所以离100已经不远了。

大概半天之后,kofeffect利用HugeCalc给出 2699997789889=164316722699997789889=1643167^2 的数字和为100。
不久之后,guetsxjm给出了更多结果:
再贴后面7个值吧,(用java写的,用了long型,估计只能算到这里)
103 , 9879498789889
106 , 9998768898889
108 , 29998985899689
109 , 85986989688889
112 , 97888999968769
115 , 386999898769969
117 , 429998989997889
前面的1--100速度很好,只花了4秒,后面7个共耗时:53秒 gxqcn给出了优化后的代码 计算了更多结果,比如:
X = 133 S = 38896878989988889
X = 135 S = 67699789959899889
X = 136 S = 38999699989995889
X = 139 S = 188997899869998769
X = 142 S = 279869897899999969
X = 144 S = 498999778899898896
X = 145
X = 148 S = 989879999979599689
然后继续优化后得到:
X = 145 S = 1877896979979898969
X = 148 S = 989879999979599689
X = 151 S = 6979497898999879969
X = 153 S = 5899989587897999889
X = 154 S = 8899988895999696889
无心人对gxqcn的代码继续修改)并且长时间运算,得出更多结果:
153 00000000000005899989587897999889
151 00000000000006979497898999879969
154 00000000000008899988895999696889
157 00000000000028979978999958969889
160 00000000000078897999969769888996
162 00000000000087989899898866889889
163 00000000000199989299899788979969
166 00000000000449998999899988698769
171 00000000000789899899796987988996
169 00000000000969988797999759789889
172 00000000003599979999987777888889
175 00000000004899976999986989889796
178 00000000008889998799995887887889
180 00000000009899698989999989958489
181 00000000017989999975899879969889
184 057997787999988988979689
187 059668999996988999989969
而gxqcn也同样继续修改他的代码来搜索更大范围的解,
他把结果推进到
03:10:10.325 X = 187 S = 59668999996988999989969
06:53:10.902 X = 189 S = 289959998978968689899889
10:25:03.810 X = 190 S = 649969889997895999999489
11:56:20.077 X = 193 S = 857799969779899989969889
17:18:44.406 X = 196 S = 1679898987989978888999689
27:16:36.456 X = 198 S = 3899689979989899957996996
30:49:37.180 X = 199 S = 4899999899498984599899889
这是gxqcn优化后的代码以及无心人旗鼓相当的代码.
两人还在继续调优和比拼性能,无心人后来还给出了
2008-7-31 18:07:28: 202 9889989899859798959899876
2008-7-31 18:31:09: 205 9988899979878799799769889
2008-8-2 3:23:35: 207 19999998896879889759998889
2008-8-3 4:30:16: 208 29969799998896589799999889
2008-8-8 21:59:10: 211 97867989988877989889899969
2008-8-20 11:36:49: 214 188797979898879969999988996
2008-8-20 22:12:53: 216 198995978993999999978999889
2008-8-30 8:04:40: 217 488798987989999989868698889
2008-9-12 14:42:23: 220 899998999999897777988888929

寻找规律

gxqcn发现:
找出一条规律:
 27…7(n个7)88…8(n+1个8)9 是 16…6(n个6)7 的平方。

该规律虽无法保证得到S=15n+19S=15n+19的下限,但对缩小下限却很有帮助,
因为除了首位2以外,其它都是相对很大的数字。

查看A067178,惊奇的发现,当 x = 15n+19 时, 竟然无一例外(n=0,1,2,3)符合上面的规律!
但是上面kofeffect的结果x=79 S=7998976969给出了比这个规律优越的结果。

mathe接着发现:
66...6(n个6)5的平方是
44...4(n个4)22...2(n+1个2)5
所以证明了对于任意6n+1,存在一个平方数,数字之和为6n+1
同样, 66...6(n个6)的平方是
44..4(n-1个4)35...5(n-1个5)6
所以证明了对于任意9的倍数9n,存在一个平方数,数字和为9n
于是只要能够对于6n+4也能够构造除平方数,数字和为6n+4,那么就证明所有9的倍数或除3余1的数都能够表示为平方数的数字和。

后来mathe又构造(10n1)2,(10n2)2,(10n3)2,(10n5)2(10^n-1)^2, (10^n-2)^2, (10^n-3)^2, (10^n-5)^2
它们的结果非常规律,在n2n\ge 2时,数字和分别为9n,9n+1,9n+4,9n29n,9n+1,9n+4,9n-2, 所以我们只要再找到数字和为1,4,7,9,10,131,4,7,9,10,13的平方数,就证明了所有9的倍数或除3余1的数都能够表示为平方数的数字和。

shshsh_0510还发现可用的数字和可以有很多个不同的平方数达到:
x=100的会很多,最小的是16431672=26999977898891643167^2=2699997789889
其他的小于10000000的数如下:
1643167,
2827313,2880937,2946167,2997764,
... 问题:是否x=100的有无穷多?

mathe认为:
很显然,对于任意s,如果存在那么就有无穷多组
这个是因为:如果x满足条件,那么100×x100\times x也满足条件。
如果要排除所有末位是0的数字,一般来说比较难证明了,但是对于n=100倒还是比较容易的,因为100是完全平方数。
我们可以构造一个长度为10的自然数序列,要求这10个数字互不相同,而且它们两两之和也各不相同,
比如序列{1,2,4,8,16,32,64,128,256,512}.而显然这样的序列可以有无穷多个,对于每个这样的序列xk{x_k}
我们构造一个整数X,对所有的10各k,其中第xkx_k为1,其它位数据的值都是0。
那么我们可以知道X2X^2首位和末尾都是1,其它中间的数字都是0或2,而且所有数字之和为10×10=10010\times 10=100.
实际上通过这个方法我们可以知道对于任意的完全平方数s,都存在无穷个末位数不是0的完全平方数,数字之和是s.

Github