前回の補足ネタです。

C#でエマープと回文素数を取得する

1479のように、左から右へどんどん大きな数字になってゆく数を、ここでは「上昇数」と呼んでいます。

引用元:「エマープでかつ上昇数である自然数を求める」を掲載しました

上昇数の例として上げられている1479は素数ではありません(3で割り切れる)。さて「エマープでかつ上昇数」という自然数はあるのでしょうか?

まず上昇数は「左から右へどんどん大きな数字になってゆく数」です。ということは121は上昇数ではないといえます。ところで11234はどうなのでしょうか?「左から右へどんどん大きな数字」になっていない(上二桁が1で同じ)ので上昇数とはいえないのでしょうか? だとすれば上昇数の最大値は123,456,789になります。

上昇数をリストアップする

まずは上昇数のリストを作成しましょう。

最初に一桁の整数だけを格納したリストを作成します。そしてこのリストを格納したリスト(List> lists)をGetIntListsOfRises(int keta)メソッドに渡します。

GetIntListsOfRises(int keta)メソッドのなかではGetIntListsOfRises2(List> list, int keta)メソッドが再帰呼び出しされ、格納されている整数が上昇していくリストのリストを取得することができます。

あとはGetLongFromIntList(List list)メソッドを呼び出して普通の整数に変換します。

GetNumberOfRises(2, 9)を実行してみると2桁から9桁までの上昇数は502個あることがわかります。

上昇数でエマープの自然数は?

あとは取得できた上昇数がエマープであるかどうか調べるだけです。上昇数がエマープである最大の自然数は1,235,789であるということがわかりました。

上昇数でエマープなのは以下の26個の自然数です。

13
17
37
79
149
157
167
179
347
359
389
1,237
1,249
1,259
1,279
1,789
3,467
3,469
12,689
13,457
13,469
13,789
15,679
34,589
345,689
1,235,789