反復アルゴリズムにおいて,各ステップごとに最大化を試みるものを欲張り算法(greedy algorithm)と呼びます.欲張り算法はあるときは最も賢明な方法ですが,ときとして破綻します.今回のコラムでは成功と失敗の2つのケースを紹介します.
===================================
【1】アルゴリズムは破綻しない・・・「エジプト式単位分数」
分子が1である分数を単位分数と呼びます.古代エジプト人は分数を表すのに,互いに異なる単位分数の和として表しました.たとえば,5/7は
5/7=1/7+1/7+1/7+1/7+1/7
ではなく,互いに異なる単位分数の和ですから,3つの単位分数を用いて
5/7=1/2+1/5/1/70
と書くことができます.
どんな分数でも相異なる単位分数の和として表現できることは,簡単に証明できます.それでは
(1)分数p/qを越えない最大の単位分数を求め,p/qから差し引き,それをp1/q1とする
(2)分数p1/q1を越えない最大の単位分数を求め,p1/q1から差し引き,それをp2/q2とする
(3)分数pi/qiを越えない最大の単位分数を求め,pi/qiから差し引き,それをpi+1/qi+1とする
という手順を繰り返せば,つねに単位分数表示が得られるでしょうか?
答えはyesで,このアルゴリズムは破綻しないことが知られています.もちろん,その表示の仕方はただ1通りです.
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
単位分数の和としての表現は少なくとも1つは存在するのですが,しかし,単位分数表示は1通りとは限らず,たとえば,前述の5/7は
5/7=1/2+1/7+1/14
5/7=1/3+1/4+1/8+1/168
のように何通りも表し方があります.
2/(2n−1)という形の分数の相異なる単位分数の和による表現では,欲張り算法により
2/(2n−1)=1/n+1/n(2n−1)
のように2個の単位分数を用いて表示できます.
2/3=1/2+1/6
2/5=1/3+1/15
2/7=1/4+1/28
2/11=1/6+1/66
2/23=1/12+1/276
はこの式に従っていますが,
2/9=1/6+1/18
2/13=1/8+1/52+1/104
2/15=1/10+1/30
2/17=1/12+1/51+1/68
2/19=1/12+1/76+1/114
2/21=1/14+1/42
は欲張り算法によるものではありません.
[参]ベンソン著,柳井浩訳「数学へのいざない」朝倉書店
===================================
【2】アルゴリズムは破綻する・・・「ラグランジュの定理」
任意の整数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
このような数値実験からいくつかのことが予想され,肯定的に証明されています.
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
[1]フェルマー・オイラーの定理(2平方和定理)
特別な素数である2を除外して,素数は4で割ると余りが1になるもの(5,13,17,29,37,41,・・・)と3になるもの(3,7,11,19,23,31,・・・)の2種類に分けられます.
このうち,4n+1の形の素数は2つの整数の平方の和として表されます.たとえば,5=1^2+2^2,13=2^2+3^2,17=1^2+4^2,29=2^2+5^2
しかし,4n+3の形の素数は1つもこのようには表せないのです.この定理はフェルマーの定理と呼ばれ,フェルマーは無限降下法でこれを証明しましたが,その証明は不十分で,100年後のオイラーによって完全な証明がなされています.
それでは,どのような自然数mが2つの平方数の和の形に書くことができるのでしょうか? 2つの平方数の和になる数m=4n+3はありません.mの素因数分解におけるp=4n+3の形のすべての素因数の指数が偶数であるときに限り,2つの平方数の和の形に表すことができるのです.
(補)自然数nが2つの平方数の和であるための必要十分条件は
「nを素因数分解したとき,4k+3の形の素数が偶数乗で現れる」ことである.
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
[2]ガウス・ルジャンドルの定理(3平方和定理)
4n+3の形の数は2個の平方数の和で表せませんが,同様にして,
「8n+7の形の数は3個の平方数の和では表されない.」
逆にいうと,n≠4^k(8n+7)はnが高々3個の平方数で表されるための必要十分条件です.ガウスの定理ともルジャンドルの定理とも呼ばれますが,ルジャンドルは2次形式ax^2+by^2+cz^2の研究を通して,より一般的な3元2次形式論として,この結果を得ています.
(補)自然数nが3つの平方数の和であるための必要十分条件は
「nが4^n(8k+7)の形でない」ことである.
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
[3]ラグランジュの定理(4平方和定理)
前述の数値実験から「すべての正の整数は,g個の平方数の和として表すことができるだろうか? さらに,gの最小値はいくつであろうか?」というより高度な問題が派生しますが,「すべての正の整数は高々4個の整数の平方和で表される」というのが,ラグランジュの定理です.
驚くべきことに,7のみならず,任意の自然数がたった4つの平方数の和の形に表せるのです.
7=2^2+1^2+1^2+1^2
2=1^2+1^2+0^2+0^2
このことを,シンボリックに書くと
n=□+□+□+□
となります.□は平方数の意味です.
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
[4]アルゴリズムの破綻
[1][2][3]はそれぞれ2元,3元,4元の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
のように,より少ない数の平方和として幾通りかに表すことのできる数もあります.
4=(±1)^2+(±1)^2+(±1)^2+(±1)^2 16通り
4=(±2)^2+0^2+0^2+0^2 +8通り
のように,4個の平方数による分割
n=x1^2+x2^2+x3^2+x4^2
の解の個数をR(n)で表せば,1829年,ヤコビは
R(n)= 8Σ(2d+1) n≡1(mod 2)
R(n)=24Σ(2d+1) n≡0(mod 2)
Σは(2d+1)|nをわたる
を示しました.
この出発点となった考え方は,
{Σq^(n^2)}^4=ΣR(n)q^n
=1+8nq^n/(1-q^n)
の2つの表現のq^nの係数を比較することであって,Σq^(n^2)はテータ関数です.R(n)を求めるのにヤコビはテータ関数を用いたのですが,それ以来,モジュラー形式などの解析的理論が数論へ応用されるようになり,ヤコビは2,4,6,8個の平方の和に分解する仕方の数,エルミートは3,5個の平方の和に分解する仕方の数を得ています.→コラム「もうひとつの五角数定理」,「分割数の漸近挙動」
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
[5]ウェアリングの問題とヒルベルトの定理
1770年,ウェアリングは4平方和定理を拡張して,
「任意の整数はたかだか9個の3乗数の和として,あるいは19個の4乗数の和として表される」
ことを証明抜きで主張しました(9三乗数定理,19四乗数定理).これが,有名なウェアリングの問題です.
g(2)=4はラグランジュにより,g(3)=9はヴィーフェリッヒによって証明されました(1909年).
4^k(8n+7)の形の数は4個の2乗を必要とするのに対して,9個の3乗を必要とする数は,たった2つの場合だけが知られています.
23=2・2^3+7・1^3
239=2・4^3+4・3^3+3・1^3
そして,1939年,ディクソンは23,239以外の整数はすべて8個の3乗数の和で書けることを示しています.(8個の立方数の和として表せない自然数は,15,22,50,114,169,175,186,212,231,238,303,364,420,428,454の15個だけである.)
ウェアリングの問題は,2次形式ではなく高次形式を扱っていて,多くの数学的思考を刺激しました.そして,1909年,ヒルベルトによって
「どの数もg個のk乗数の和で表される」
ことが肯定的に証明されています.
n=x1^k+・・・+xg^k
ヒルベルトはg(k)の値がkのみによって表されることを証明したのですが,それはg(k)の存在のみを証明したのであって具体的な値を決める方法を示したものではありませんでした.
1859年,リューヴィルはg(4)≦53を示しました.g(4)=19ですからこの結果は実際とはかなり隔たりがあるのですが,g(4)の限界を与える方法を初めて示したことになります.そのあたりからいろいろな研究がなされることになりました.そして,19四乗数定理:
「すべての正の整数は19個の4乗数の和で表される」
は1986年に証明されています.つまり,ウェアリングの問題(18世紀)も200年以上かかって解決されたことになります.
なお,g乗数は平方数よりもずっとまばらにしか分布しませんから,以下,37個の5乗数の和,73個の6乗数の和,・・・と続きます.実は,ガウス記号を用いて
g(k)=2^k+[(3/2)^k]−2
の式が正しいだろうと予想されています.1≦k≦10では
k 1 2 3 4 5 6 7 8 9 10
下界 1 4 9 19 37 73 143 279 548 1079
となり,ここに示した値はすべてこの式を満たし,かなりの範囲のところまで正しいことが確認されます.
g(k)≧2^k+[(3/2)^k]−2
の不等式を証明したのはオイラーの息子,ヨハン・アルブレヒト・オイラーです(1772年).この不等式の証明は
[参]水上勉「チャレンジ!整数の問題199」日本評論社
のQ191(p272)に掲載されています.簡単でいてしかも面白い証明ですの是非お読みください.
===================================