今回のコラムでは,破綻するアルゴリズムの例として数の平方数分割を,破綻しないアルゴリズムの例として数のフィボナッチ数分割を取り上げます.
===================================
【1】数の平方数分割
任意の整数nは,n個の平方和
n=1^2+1^2+・・・+1^2
に書けますから,これをなるべく少ない数の平方和でnを表そうと思うのは自然な成り行きです.そこでまず,簡単な数値実験から始めることにしましょう.1から10までの整数をいくつかの平方数の和の形式で表現するというものです.
整数の平方
0,1,4,9,16,25,・・・
は非常にまばらにしか存在しませんが,2つの平方数の和の形で表される整数はより頻繁に現れます.1,2,4,5,8,9,10,・・・
1=1^2+0^2
2=1^2+1^2
4=2^2+0^2
5=2^2+1^2
8=2^2+2^2
9=3^2+0^2
10=3^2+1^2
ここで,3,6,7といった整数は,2つの平方の和では書けないことがわかります.しかし,3つの平方和となると幾分間隙を埋めてくれます.
3=1^2+1^2+1^2
6=2^2+1^2+1^2
それでも,なおすべての正の整数を得ることはできません.最後まで残った7に対しては3つの平方数の和で書けず,4つの平方数が必要となります.
7=2^2+1^2+1^2+1^2
このような数値実験からいくつかのことが予想されます.たとえば「すべての正の整数は,g個の平方数の和として表すことができるだろうか? さらに,gの最小値はいくつであろうか?」というより高度な問題が派生しますが,「すべての正の整数は高々4個の整数の平方和で表される」というのが,ラグランジュの定理です.
驚くべきことに,7のみならず,任意の自然数がたった4つの平方数の和の形に表せるのです.
7=2^2+1^2+1^2+1^2
2=1^2+1^2+0^2+0^2
このことを,シンボリックに書くと
n=□+□+□+□
となります.□は平方数の意味です.
===================================
【2】アルゴリズムの破綻
2次形式の問題は,n次元空間における格子点の配置の問題として幾何学的に考えることができます.すなわち,ラグランジュの定理は4次元空間内の原点を中心とする半径√nの球面には必ず格子点があることを主張しているわけです.半径√nの2次元の円,3次元の球には格子点が存在するとは限らないのです.
上の数値実験では,実際に4個必要なのは7だけで,他はすべて3個以下の平方数の和で書けていました.どの場合に2つで済むのか,3つで済むのか?という問題は,ラグランジュの定理に先行するフェルマー・オイラーの定理,オイラー・ルジャンドルの定理で解決されています.
また,nを越えない最大の平方数は,ガウス記号を用いて[√n]^2と表せるのですが,nを越えない最大の平方数をとり,その残りに対して同様に最大の平方数をとる,・・・,そして残りが平方数になるとおしまいというアルゴリズムによって,4個の平方数の和
n=n1^2+n2^2+n3^2+n4^2
に分解できるように思われます.はたして,これは正しいのでしょうか? 数値実験を続けてみることにします.
11=3^2+1^2+1^2
12=3^2+1^2+1^2+1^2
13=3^2+2^2
14=3^2+2^2+1^2
15=3^2+2^2+1^2+1^2
16=4^2
17=4^2+1^2
18=4^2+1^2+1^2
19=4^2+1^2+1^2+1^2
20=4^2+2^2
21=4^2+2^2+1^2
22=4^2+2^2+1^2+1^2
23=4^2+2^2+1^2+1^2+1^2
素数23では5個の平方和となり,このアルゴリズムは23で破綻してしまいます.もちろん,23は8n+7型の素数ですから,3個の平方和では表すことはできませんが,
23=3^2+3^2+2^2+1^2
のように4個の平方和の形に表すことができます.
また,
12=3^2+1^2+1^2+1^2=2^2+2^2+2^2
18=4^2+1^2+1^2=3^2+3^2
19=4^2+1^2+1^2+1^2=3^2+3^2+1^2
23=4^2+2^2+1^2+1^2+1^2=3^2+3^2+2^2+1^2
のように,より少ない数の平方和として幾通りかに表すことのできる数もあります.
===================================
【3】数の三角数分割
数の三角数分割(ガウス,1796年)
n=△+△+△,△=k(k+1)/2
すなわち「すべての整数は3つの三角数の和によって表し得る」についての同様の問題は,読者の演習問題とします.
7=3+3+1=6+1+0
8=6+1+1
9=3+3+3=6+3+0
10=6+3+1
===================================
【4】数のフィボナッチ数分割
フィボナッチ数は漸化式
Fn=Fn-1+Fn-2
に従って,その前の2つの数の合計として順次計算することができて,
1,1,2,3,5,8,13,21,34,55,89,・・・
となる.
任意の正の整数nは,それを超えない最大のフィボナッチ数と余りに分割されるが,このとき余りもそれを超えない最大のフィボナッチ数と余りに分割され,任意の正の整数nは一意的に表すことができる.たとえば,
83=55+28
28=21+7
7=5+2
より,83=55+27+5+2となる.
2進法では,83=64+16+2+1のように隣り合った2のネキ乗がしばしば必要になるが,数のフィボナッチ数分割では,どの2つのフィボナッチ数も隣り合っていないことに注意されたい.
フィボナッチ数系では,
3=3
4=3+1
5=5
6=5+1
7=5+2
8=8
9=8+1
10=8+2
11=8+3
12=8=3+1
・・・・・・・・・・・
1000=897+13
・・・・・・・・・・・
1000000=832040+121393+46368+144+25=F30+F26+F24+F12+F10
のように,一般に
n=Fk1+Fk2+・・・+Fkn
で表されるのである(ツェッケンドルフの定理).
===================================