Quantcast
Channel: 円周率近似値の日に生まれて理系じゃないわけないだろ! - knifeのblog
Viewing all articles
Browse latest Browse all 5376

フィボナッチ数列の積は2乗の差で表せるかの数学的考証

$
0
0

先日の続きです。

プログラムを組む前に、数学的な考証をやっておく必要がある。

問題
n≥6において、F1からFnまでの積pは正整数x, yとして、x2-y2に表せるのか?
表せるならば、f(n)=p=x^2-y^2として、最小のxだけの式を示せ。


f(6)=240=16^2-4^2


フィボナッチ数列を列挙してみる。

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, …

これの1項からn項までの積なので、

1, 1, 2, 6, 30, 240, 3120, 65520, 2227680, 122522400, …

f(6)=240=162-42
と出来ると言っているので、おそらくは
f(5)=30は出来ないのだろう。

右辺のx2-y2は、(x-y)(x+y)である。
f(5)=30
=1*30
=2*15
=3*10
=5*6
と2つの正整数の積の形には出来るが、
(x-y)(x+y)の形には出来ないのだろう。

(x-y)と(x+y)との和と差を考える。
和は、
(x+y)+(x-y)=2x
差は、
(x+y)-(x-y)=2y
となる。

つまり、和も差も偶数である必要があるので、2正整数の積は偶奇が異なってはダメということです。

f(5)=30
=1*30 → 偶奇が異なる
=2*15 → 偶奇が異なる
=3*10 → 偶奇が異なる
=5*6   → 偶奇が異なる
となるので、(x-y)(x+y)の形には出来ないということである。

f(6)=240
=1*240 → 偶奇が異なる
=2*120 → 偶奇が等しい → x=(120-2)/2=56, y=(120+2)/2=61
=3*80   → 偶奇が異なる
=4*60   → 偶奇が等しい → x=(60-4)/2=28, y=(60+4)/2=32
=5*48   → 偶奇が異なる
=6*40   → 偶奇が等しい → x=(40-6)/2=17, y=(40+6)/2=23
=8*30   → 偶奇が異なる
=10*24 → 偶奇が等しい → x=(24-10)/2=7, y=(24+10)/2=17
=12*20 → 偶奇が等しい → x=(20-12)/2=4, y=(20+12)/2=16
=15*16 → 偶奇が異なる
と5つの解があるということである。


ある程度、数学的な考証が出来ましたので、テストプログラムを考えてみました。

大外はフィボナッチ数列の積を求めるループ
内側にxのループとする案1
内側に差の右側の項とする案2

と2つの案が出来ました。

以下は、LMを使ってのC言語風のコードである。

フィボナッチ数列の大外は、
a=5;
b=8;
p=240;
i=6;
while ( p < 10^100 ) {
    /* 処理 */
    c=a+b; /* フィボナッチ数列 */
    a=b;
    b=c;
    p*=c; /* 積 */
}

内側の処理の案1は、
x=ceil(sqrt(p))-1;
do {
    x++;
    y=ceil(sqrt(x^2-n));
    if ( p==x^2-y^2 ) {
        printf("f(%d)=%d=%d^2-%d^2\n", i, p, x, y);
        break; /* breakしなければ、すべての解を列挙 */
    }
} while ( x-y > 1 );

内側の処理の案2は、
q=ceil(sqrt(p));
q-=q%2;
do {
    while ( p%q !=0 && q > 0 ) {

        r=p/q;
        if ( l%2 == 0 ) {

            x=(r-q)/2;
            y=(r+q)/2;
            printf("f(%d)=%d=%d^2-%d^2\n", i, p, x, y);
            break; /* breakしなければ、すべての解を列挙 */
        }
        q-=2;
    }
} while ( q > 0 );

どちらが高速に動くのかは微妙なラインではある。

とりあえず、
f(6)=240=16^2-4^2
f(7)=3120=56^2-4^2
f(8)=65520=256^2-4^2
f(9)=2227680=1493^2-37^2
f(10)=122522400=11069^2-19^2
f(11)=10904493600=104425^2-295^2
f(12)=1570247078400=1253095^2-25^2
f(13)=365867569267200=19127694^2-33294^2
f(14)=137932073613734400=371392242^2-351858^2
f(15)=84138564904377984000=9172707781^2-1769531^2
f(16)=83044763560621070208000=288174883685^2-5122715^2
f(17)=132622487406311849122176000=11516183742660^2-767068860^2
f(18)=342696507457909818131702784000=585402859117883^2-2341399867^2
ここまでは解を出してきました。

f(19)が見つかるのか、しばらく放置してみます。


ではでは


Viewing all articles
Browse latest Browse all 5376

Trending Articles