・分数計算                           GAI 氏

 素数を材料として連分数を作ることを試みる。

 2=2/1 、2+1/3=7/3 、2+1/(3+1/5)=37/16 、2+1/(3+1/(5+1/7))=266/115 、・・・・・・・・

 さて、この様に素数の小さいものから順番に組み込んでいくとき、10個までの素数

  [2,3,5,7,11,13,17,19,23,29]

で出来上がる分数は如何に?


 らすかるさんからのコメントです。(平成29年3月31日付け)

 自作電卓プログラムに連分数を変換する機能を付けてありますので、

   8451128448/3653694001

と、直ちに求まりますが、このプログラムで使っているアルゴリズムを紹介します。

 漸化式は、次のようになります。

c[1]〜c[10]=2,3,5,7,11,13,17,19,23,29
a[0]=1, b[0]=0, a[1]=c[1], b[1]=1 a[n]=c[n]a[n-1]+a[n-2], b[n]=c[n]b[n-1]+b[n-2] (n≧2)

 これに従って計算すると、

a[0]=1, b[0]=0
a[1]=2, b[1]=1
a[2]=3a[1]+a[0]=7, b[2]=3b[1]+b[0]=3
a[3]=5a[2]+a[1]=37, b[3]=5b[2]+b[1]=16
a[4]=7a[3]+a[2]=266, b[4]=7b[3]+b[2]=115
a[5]=11a[4]+a[3]=2963, b[5]=11b[4]+b[3]=1281
a[6]=13a[5]+a[4]=38785, b[6]=13b[5]+b[4]=16768
a[7]=17a[6]+a[5]=662308, b[7]=17b[6]+b[5]=286337
a[8]=19a[7]+a[6]=12622637, b[8]=19b[7]+b[6]=5457171
a[9]=23a[8]+a[7]=290982959, b[9]=23b[8]+b[7]=125801270
a[10]=29a[9]+a[8]=8451128448, b[10]=29b[9]+b[8]=3653694001

となり、a[10]/b[10]が目的の分数となります。

 電卓プログラムでは、これを「連分数計算(連分数→小数)」ではなく「連分数展開(小数→
連分数)」時に使用しています。

 小数を連分数展開するとき、展開作業自体は、「整数部をとって逆数にする」の繰返しです
ので簡単ですが、これだけだとどこまで続ければよいかが決まりません。

 そこで、現在の連分数展開の精度と小数を比較して打ち切るタイミングを決めていますが、
このとき前から順に与えられた連分数によって、現在の精度が計算できれば便利ですので、
上記の方法を採用しています。



                         投稿一覧に戻る