まず、与えられた数が、何種類の数字で構成されているかを数えるためのアルゴリズムを考えてみる。
与えられた数を a とし、 b=a2 とする。
b の最下位の数字を知るためには、
の2通りの方法が考えられるが、一般に後者の方が処理が速いと考えられるので、
後者の方針に従って、アルゴリズムを考える。
c$= (b を文字列化したもの) = cutlspc(str(b))
d = (b の桁数) = len(c$)
とする。
また、各桁の数字の格納場所を、配列 z$(10)とする。これは10通りしかあり得ない。
f を文字数のカウンタとする。
c$ を右から順に見ていって、
アルゴリズムは以下の通り。
b=a^2 : c$=cutlspc(str(b)) : d=len(c$) for i=d to 1 step -1 : f=0 : e$=mid(c$, i, 1) if f=0 then inc f : z$(f)=e$ : goto * for j=1 to f if e$=z$(j) then cancel for : goto * next j inc f : z$(f)=e$ ◎ if f>2 then cancel for : goto ** : ' more than 3 * next i print a , b ** return
a についてループさせて、その中で、このサブルーチンを呼ぶことにより、
とりあえず、2 種類の数字から構成される 2 乗数を探して見よう。
実行結果は、以下のとおり。
ここでは、自明なもの
は省く。
a | b = a^2 |
---|---|
11 12 15 21 22 |
121 144 225 441 484 |
26 38 88 109 173 |
676 1444 7744 11881 29929 |
212 235 264 3114 81619 |
44944 55225 69696 9696996 6661661161 |
実は現在発見されているのは、以上の 15個のみである。
この方面で攻めるのもいいが、サンプルがたった 15個では、あまりにも張り合いがない。
そこで文字数を 3 文字とし、問題を拡張して考えてみよう。
プログラムは◎のところを、
if f>2
から、
if f>3
に変更するだけである。
前 | この章の目次 | 次 |
---|