N寄生数

問題
ある整数をA 、Aの一桁目の数値を N としたときに、 A を N 倍すると、右へ一桁分ローテートシフトし、
Nが最上位桁に移る数 のなかで最小の数を「N寄生数」と言います。 ただし、2<=N<=9 とします。
この8つの数を求めてください。

例えば、N=4 の時は、102564 となります。
102564 * 4 = 410256
となり、右にローテートシフトします。

調べてみたら、Wikipediaでは、これを『Parastic Numbre』というようです。
このページを見ると、一桁目がNであるという条件が無いようですが、
僕の問題では、一桁目が掛ける数と同じであるという条件を付加しています。
そういう意味では、この問題は、
The On-Line Encyclopedia of Integer Sequences! の A097717
の 定義になりますね。

ところで、Parastic Numberは日本語でどう訳せばいいんでしょうか。 勝手に「寄生数」と訳しましたが、どなたか知っていれば教えてください。




解き方
N = 4 で考えてみます。
求める数Aは、1桁目が4であることは自明です。 つまり、
_____4 * 4 = ____6
となります。
この右辺の数が、数Aを右ローテートした値に等しいのだから、 求める数Aの下2桁は 64 です。
2桁目がわかれば、同じように 64 を4倍して、256 が得られますから
_____64 * 4 = ____56
となり、これからAの 3桁目が 5であることがわかります。

実際には、64を4倍するのではなく、
1桁目を 4 倍したときに得られた 繰り上がり数 1 を記憶しておき、
この1と 6を4倍した値24を加え、25を求めます。
この5が、3桁目の値です。
ここまでで、求める数Aが、____564 であることがわかりました。
これを 4桁、5桁... と求めていきます。
_____564 * 4 = ____256
____2564 * 4 = ___0256
___02564 * 4 = __10256
__102564 * 4 = _410256    ここで終わり

そして、上記右辺の最上位桁の数が4 で、繰り上がりの数が 0 になるまで繰り返します。
このときの、左辺の数が、求める数Aです。
こうすれば、求める数Aが巨大な数であっても対応できます。

手順を言葉で理解するよりも、実際に紙と鉛筆をつかって手計算してみたほうが、 すぐに理解できると思います。

そういう意味では、プログラミングの時間(アルゴリズムを考え、コードを書き、テスト・デバッグし、
答えを見つけるまでの時間)よりも、 最初から手で計算し答えを見つける時間のほうが、短いかもしれません。
まあ、短いプログラムなので、プログラミングしたほうが早い人も多いと思いますが...

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

■ParasticNumber.cs

■MainPage.xaml.cs
 
■MainPage.xaml