婚約数(準友愛数)を求める


婚約数(Betrothed Numbers)とは、2つの異なる自然数の組(ペア)になっていて、1と自分自身を除いた約数の和が、もう片方の数と等しくなるような数を言います。
「準友愛数」とも呼ばれているようです。友愛数の定義とほとんど同じですからね。

例えば、一番小さな友愛数の組は(48,75)で、
48 → 2 + 3 + 4 + 6 + 8 + 12 + 16 + 24 = 75
75 → 3 + 5 + 15 + 25 = 48
となります。

以下、作成したSilverlightプログラムです。最初の12個のペアを求めています。

プログラムコードは、友愛数を求めるプログラムとほとんど同じです。
友愛数のプログラムでは、GetNumbers メソッドは、取り出す個数を指定できなかったので、呼び出す側で、Take(n) とかして、組を取りだす個数を指定しましたが、こちらは、GetNumbersメソッドに取り出す個数を指定できるようにしました。といっても、Take(n)を中で呼んでるだけですが...

このプログラムでは12個のペアを求めていますが、20個、30個のペアを求めようとするとかなりの時間がかかります。高速化にはさらなる工夫が必要となります。

以下、C#+Silverlightのコードです。BetrothedNumber.csはmSilverlightに依存していません。

■BetrothedNumber.cs

■MainPage.xaml.cs

■MainPage.xaml