完全数を求める

小説「博士の愛した数式」で一般の人にも有名になった「完全数」ですが、その完全数を求めるプログラムです。
完全数とは、その数自身を除く約数の和が、その数自身と等しい自然数のことです。
例えば、28 の約数は、1,2,4,7,14ですが、この合計は、1+2+4+7+14 = 28 となりますので、28は完全数ということになります。

この問題を普通にプログラミングすると、約数を求め、その和がそれ自身の数と等しいかどうかを調べてゆくことになります。しかしこのやり方だと小さいほうから最初の4つまではすぐに求まりますが、5つ目の完全数を求めようとするとかなりの時間がかかります。6つ目の完全数を求めようとすると、気の遠くなるような時間が必要です。
時間がある方は、確かめてみてほしいと思います。

そのためこのプログラムでは、
「完全数はメルセンヌ素数から導き出される」
という性質を利用することにしました。
2^n-1が素数(メルセンヌ素数)ならば、偶数の完全数は、2^(n-1)・(2^n-1) で求められることが証明されているそうです。詳しくは、こことかここを参照してください。
奇数の完全数はまだ発見されていません。奇数の完全数が存在しないことはまだ証明がされていないそうですが、このプログラムでは、偶数の完全数だけをもとめても実質的にはなんの問題もありません。

以下、C#+Silverlightのコードです。

■PerfectNumber.cs
 
■MainPage.xaml.cs
 
■MainPage.xaml