第99位数字

  (1+√2)500  第99位数字是多少?100位呢?...(更多位的具体数字的计算方法有待探讨)

  这个问题出自Emissary[3],1999 fall 卷。乍一看这个问题似乎有点难。及时你想偷懒决定利用计算机来算,也需要一定的耐心,且需要涉及特殊的程序(结合高效的算法),才能得到你需要的信息。

  如果用计算机的话,因为√2不是常数,需要至少计算101位,而这已经超过了int类型4个字节的存储极限(2^32-1=42 9496 7295),即使使用_int64也无济于事。只能模拟运算了,而这个问题的难点在于模拟 幂运算 或者 两个大整数的乘法运算。有时间,不妨一试。

  读了下面的方法,你会发现:数学是多么的事半功倍!

  注意到下面的表达式

      (1+√2)500 + (1-√2)500

  是一个整数。因为当展开时,所有的√2 的奇次幂都消去了。后半部分是一个非常小的数,有多小?事实上,由于√2-1<1/2 ,(1/2)^500=2^(-500),利用计算机领域常用的近似 2^10≈10^3 , 2^500≈10^150.

  以上,我们有 (1-√2)500 < 10-150 .

  不难想象, (1+√2)500 与上述表达式相差一个几乎可以忽略不计的量,它的十进制表示的小数点后面将有 一大串 的9 。实际上, (1-√2)500约等于 4×10-192  

因此,小数点后面事实上有191个9,后面跟着590 591 051...特别地,第99位是9.

  是不是感到不可思议呢?同理可知  (1+√2)502 也非常接近一个正整数,但是这两个大数之间的比例是 (1+√2)2 ,用十进制表示是:5.828 427 12...

  添加(1-√2)500  的技巧看起来有些出乎意料,但是这些成对的共轭数的幂(其中一个很大一个很小)在数学中经常出现。Binet 著名的Fibbonacci 公式

           Fn =(1/√5)( (1+√5)/2 )n - (1/√5)( (1-√5)/2)n

  精确的给出了Fibbonacci数列1,1,2,3,5,8,13,21,34,55...的通项公式,但是公式中的第二项已经足够小,以致于使得对任意的n>=0,只需计算 (1/√5)( (1+√5)/2 )n 并找到距离它最近的正整数,即可求出Fn.

                                  2012-04-29 12:10:00    华电一校学一424         

原文地址:https://www.cnblogs.com/tupx/p/2476090.html