system: [SYSTEM]

user: 3. 阿基米德方程的最小解 对从Archimedes分牛问题得出的Pell方程(1)， [ 7 ] 和 [ 8 ] 曾用大型计算机算出了它的正整数解，后来 [ 3 ] 又借助于数学软件Mathematica4.0予以解决，不过 [ 3 ] 在其发表的论文中对利用Mathematica解决此问题中的一些相关问题表述不太清楚，也未指出一些应注意的细节，因此其计算过程经本文作者检验有些无法重复。本文详细给出了用Mathematica解决此问题的所有过程和有关细节，利用个人计算机中得出了本文的所有结果。所有过程读者均可自己重复。 Archimedes所提出的一些问题的解都是非常巨大的数，比如国际象棋问题的解答就是一个很大的数2 64 − 1。同样，本文所涉及的最后解答也是十万位级别的数，因此不可能在本文中完全写出，为了清楚地展示得出解答的过程，我们用两种方法求出解答。 方法1. 为了减少数据的大小，首先考虑410286423278424是否有平方因子，经过计算，发现 410286423278424 = 9314 2 × 4729494 因此方程(1)可化为方程 x 2 − 4729494 z 2 = 1 (7) 其中 z = 9314 y (8) 现在，我们在Mathematica中键入命令 In[ 1 ]:= ContinuedFraction[Sqrt[ 4729494 ]] 然后得到答案 Out[ 1 ]= {2174， {1， 2， 1， 5， 2， 25， 3， 1， 1， 1， 1， 1， 1， 15， 1， 2， 16， 1， 2， 1， 1， 8， 6， 1， 21， 1， 1， 3， > 1， 1， 1， 2， 2， 6， 1， 1， 5， 1， 17， 1， 1， 47， 3， 1， 1， 6， 1， 1， 3， 47， 1， 1， 17， 1， 5， 1， 1， 6， 2， > 2， 1， 1， 1， 3， 1， 1， 21， 1， 6， 8， 1， 1， 2， 1， 16， 2， 1， 15， 1， 1， 1， 1， 1， 1， 3， 25， 2， 5， 1， 2， > 1， 4348}} 根据定理2，我们应当把上述连分数修改成一个有限连分数如下 R = {2174，1， 2， 1， 5， 2， 25， 3， 1， 1， 1， 1， 1， 1， 15， 1， 2， 16， 1， 2， 1， 1， 8， 6， 1， 21， 1， 1， 3， 1， 1， 1， 2， 2， 6， 1， 1， 5， 1， 17， 1， 1， 47， 3， 1， 1， 6， 1， 1， 3， 47， 1， 1， 17， 1， 5， 1， 1， 6， 2， 2， 1， 1， 1， 3， 1， 1， 21， 1， 6， 8， 1， 1， 2， 1， 16， 2， 1， 15， 1， 1， 1， 1， 1， 1， 3， 25， 2， 5， 1， 2， 1} 现在将其输入到Mathematica中去，再输入命令 FromContinuedFraction[R] 即得到 109931986732829734979866232821433543901088049 Out[ 3 ]= ----------------------------------------------------------------------- 50549485234315033074477819735540408986340 令 u = 109931986732829734979866232821433543901088049 ， v = 50549485234315033074477819735540408986340 由于 u 2 − 4729494 v 2 = 1 因此(u，v)就是方程(7)的最小解，而(7)的所有正整数解可以根据公式(6)算出 v n + 2 = 219863973465659469959732465642867087802176098 v n + 1 − v n (9) v 1 = 50549485234315033074477819735540408986340 v 2 = 11114010680260185606329559328519372253719415502127416430951773446940215793566356501320 显然，方程(1)的最小解包含在这些解中，但是它必须符合条件(8)，因此方程(1)的最小解就是v中能被9314整除的最小的v。这样通过一个循环程序就可找到这个最小解(循环程序应在9314|v n 时停止，而整除性可通过计算v n 除以9314所得的余数是否为0来判定，这一余数可通过公式 r n = v n − IntegerPart [ v n / 9314 ] × 9314 来计算。 最后结果是循环到 n = 2329 次即可得出答案 x 0 ， y 0 。 方法2：直接对方程(1)进行计算，算法如下： 1. 计算 410286423278424 的连分数 在Mathematica中键入命令 ContinuedFraction[Sqrt[ 410286423278424 ]] 回车后即可得出一个如下形式的无限连分数 {20255528， {4， 1， 1， 1， 4， 1， 2，……， 2， 1， 4， 1， 1， 1， 4， 40511056}} (全部连分数可见 [ 9 ] )。 2. 根据定理2，我们应当把上述连分数修改成一个有限连分数如下 R = {20255528，4， 1， 1， 1， 4， 1， 2，……， 2， 1， 4， 1， 1， 1， 4} (全部连分数可见 [ 10 ] )并在Mathematica中输入它，即键入 R = {20255528，4， 1， 1， 1， 4， 1， 2，……， 2， 1， 4， 1， 1， 1， 4} 后再回车。 3. 计算p，q 在Mathematica中再键入命令 FromContinuedFraction[R] 并回车就得到一个分数，其分子就是p，分母是q，这两个数都是非常大的数。其中p是一个103，273位的正整数，它的开头100位是 3765344502347205884018786193550576892856610111171560836237851390311234167566480643694312349186281391， 最后100位是 1040818520976114141057706314714705096647940993314916269513956239940831835922232584777023371728320049 (所有数字可见 [ 11 ] )。q是一个103，266位的正整数，它的开头100位是 1858921901386913309458254208638757413523161201977027301065816550850027682269834724191861021631174425， 最后100位是 0600177126871130538492849382053917018667259351819528374696260428780278235279034092592107710208663490 (所有数字可见 [ 12 ] )。根据定理2， p 2 − D q 2 必等于+1或−1，利用上面的p，q的末位数可知 p 2 − 410286423278424 q 2 的值只能是+1 (在Mathematica中也可直接验证这一结论)，这就说明方程(1)的最小解就是 x 0 = p ， y 0 = q ，由方法1和方法2得出的答案是完全一致的。 注1：在向Mathematica中输入任何数据之前，必须把数字之间的换行符\。分行符>和空白全部去掉，否则Mathematica会认为你输入的是多个数据，从而得不到正确的结果。比如当你输入In[ 1 ]:= A=ContinuedFraction[Sqrt[ 4102865 ]]并回车后，Mathematica会显示如下结果 Out[ 1 ] = {2025， {1， 1， 4， 4， 1， 1， 1， 2， 3， 5， 1， 4， 7， 1， 2， 1， 1， 2， 2， 1， 2， 1， 115， 63， 3， 2， 4， 2， > 5， 2， 3， 10， 1， 4， 3， 1， 10， 82， 1， 1， 2， 1， 1， 10， 1， 1， 1， 3， 3， 2， 1， 15， 7， 1， 6， 2， 1， 3， 1， > 4， 2， 1， 1， 1， 2， 15， 3， 1， 5， 39， 1， 14， 1， 1， 1， 252， 1， 1， 6， 1， 2， 1， 2， 1， 21， 6， 18， 6， 21， > 1， 2， 1， 2， 1， 6， 1， 1， 252， 1， 1， 1， 14， 1， 39， 5， 1， 3， 15， 2， 1， 1， 1， 2， 4， 1， 3， 1， 2， 6， 1， > 7， 15， 1， 2， 3， 3， 1， 1， 1， 10， 1， 1， 2， 1， 1， 82， 10， 1， 3， 4， 1， 10， 3， 2， 5， 2， 4， 2， 3， 63， > 115， 1， 2， 1， 2， 2， 1， 1， 2， 1， 7， 4， 1， 5， 3， 2， 1， 1， 1， 4， 4， 1， 1， 4050}} 如果想把上述无限连分数修改成定理2所要求的有限连分数，并将其重新输入Mathematica中，则必须先把它写成下面的形式 R = {2174，1， 2， 1， 5， 2， 25， 3， 1， 1， 1， 1， 1， 1， 15， 1， 2， 16， 1， 2， 1， 1， 8， 6， 1， 21， 1， 1， 3， 1， 1， 1， 2， 2， 6， 1， 1， 5， 1， 17， 1， 1， 47， 3， 1， 1， 6， 1， 1， 3， 47， 1， 1， 17， 1， 5， 1， 1， 6， 2， 2， 1， 1， 1， 3， 1， 1， 21， 1， 6， 8， 1， 1， 2， 1， 16， 2， 1， 15， 1， 1， 1， 1， 1， 1， 3， 25， 2， 5， 1， 2， 1} 本文参考文献中的 [ 9 ] [ 10 ] [ 11 ] 和 [ 12 ] 在储存数据后都进行了上述处理，因此文件中的数据都是可以直接输入Mathematica的。 注2：在 Mathematica中，对比较小的分数，它以下面的用虚线当做分数线的分数形式显示，例如 109931986732829734979866232821433543901088049 Out[ 3 ] = ----------------------------------------------------------------------- 50549485234315033074477819735540408986340 但对比较大的分数，则用/号把分子和分母分开。请读者注意区分换行符\和前面的分数线符号。