ゴールドバッハの予想

「ゴールドバッハの予想」とは、次のようなものです。
 ・4以上の偶数は2つの素数の和であらわすことができる
4 = 2 + 2 ですから、これを言い直すと、
 ・6以上の偶数は2つの素数の和であらわすことができる。
とも言えます。

この問題は、数学の未解決問題の一つとして知られてて、1742年に数学者・ゴールドバッハがオイラー宛ての手紙の中で
5よりも大きい自然数は3つの素数の和であらわすことができる。
と予想したことから来ています。

なぜ、この予想と最初の予想が同値であることの証明は、
 MATHEMATICAL WORLDの「ゴールドバッハの予想 (Goldbach's conjecture)
をご覧ください。

ここでは、longまでの値でそれが成り立っているのかを調べるプログラムを書いてみました。
といっても、6,8,10.... とすべてを調べるのは時間がかかるので、入力した偶数が、2つの素数の和で表されるかを調べるものとしました。



このプログラムは、一回の処理で一つの偶数だけを扱うので、速さも要求されませんので、素数かどうかを調べるコードを書くことができれば、それほど難しいものではないですね。

素数かどうかは、「素因数分解」のページで示したアルゴリズムをそのまま流用しています。3,5,7,9...と順に割り切れるかどうかを調べるよりは、多少効率が良くなってはいるとは思いますが、きとんと検証はしていないので、興味のある方は検証してみてください。実は、配列操作などが影響してほとんど速度改善になっていないということも考えられます。

しいて、このプログラムコードで解説すべき点を挙げるとすれば、 2つの素数を返すところで、

return new long[] { a, b };

と配列を返している点でしょうか。2つのプロパティを持つ専用のクラスを定義するよりも、この方が簡単です。
C#4.0+.NET Framework4 だと、Tuple を戻り値にして、

return Tuple.Create(a,b);

とする方法もありますが、Visual Studio 2010+Silverlight3では、利用できません。

以下に、C#+Silverlightのコードを示します。

■Goldbach.cs


■MainPage.xaml.cs

■MainPage.xaml