クイズ大陸



履歴 検索 最新 出題

No. 16≫ No.17 ≫No. 18
?ボムボム 2009/11/16 19:44
プログラムを視野に入れるなら、次のような考え方でいけると思います。
可能なら、???さんや他の方にもプログラムを組んでいただいて検証していただければうれしいです。

10^nの桁の数字をa[n]とする。
10^nの桁まで求めた数字X[n]は
X[n]=a[n]*10^n+a[n-1]*10^(n-1)+...+a[1]*10+a[0]
と書ける。
これの二乗を計算したとき、10^(n+1)の桁は
a[1]*a[n]+a[2]*a[n-1]+...+a[n]*a[1]
と10^nの桁以下からの繰り上がりbとの和である。
これの一の位が10^(n+1)の桁の数字になり、それがa[n+1]を決めることになる(a[0]=5か6で決め方は異なるが)。

a[0]=5の場合を考える。
この繰り上がりbがどうなっているかを考える。
X[n]の二乗の10^nの桁の計算をすると
a[0]*a[n]+a[1]*a[n-1]+...+a[n]*a[0]
と10^(n-1)の桁以下からの繰り上がりcとの和になるので、
a[0]*a[n]+a[1]*a[n-1]+...+a[n]*a[0]+c
である。
題意よりこれの一の位がa[n]に一致していたはずであり、a[n]を引いて10で割った数
(a[0]*a[n]+a[1]*a[n-1]+...+a[n]*a[0]+c-a[n])/10
が次の10^nの桁への繰り上がりbになる。

ここで、繰り上がりcは10^(n-1)以下の計算で生じるので、a[n]*10^nは計算式に全く含まれない。
すなわちあらかじめX[n-1]の二乗を計算し、10^(n-1)の桁以下から10^nの桁への繰り上がりがdだったとすると、dをそのままcに用いることができる。
したがってX[n-1]の二乗計算で10^(n-1)の桁以下からの10^nの桁への繰り上がりをb[n]と書くことにすると、X[n]^2の10^nへの繰り上がりcもX[n-1]^2の10^nへの繰り上がりdも
c=d=b[n]
である。
またX[n]^2の10^(n+1)への繰り上がりbは
b=b[n+1]
と書ける。

以上をふまえて、10^(n+1)の桁の数字を求めたい場合(a[0]=5のときを考えることにする)。
10^nの桁の数字a[n]まで求まっているとして、上で考えたようにX[n]の二乗を求めて次のa[n+1]を求めるので
S[n]=a[0]*a[n]+a[1]*a[n-1]+...+a[n]*a[0]
T[n]=a[1]*a[n]+a[2]*a[n-1]+...+a[n]*a[1]
と、繰り上がりb[n]が計算できているとして、まず10^nの桁の計算をしてみると
S[n]+b[n]
であり、題意よりこれの一の位がa[n]に一致している。
したがって10^(n+1)への繰り上がりb[n+1]は
b[n+1]=(S[n]+b[n]-a[n])/10
である。
さらに10^(n+1)の桁は
T[n]+b[n+1]
である。
これの一の位がa[n+1]と求まる。
なおn≠0であれば、S[n]=T[n-1]+2a[0]a[n]
でもある。

具体的にやってみると
a[0]=5、S[0]=25、T[0]=0、b[0]=0
であり、10^0すなわち一の位の計算は
S[0]+b[0]=25
で、これの一の位がa[0]に確かになっている。
10^1への繰り上がりb[1]は
b[1]=(S[0]+b[0]-a[0])/10=(25+0-5)/10=2
である。
さらに10^1の桁は
T[0]+b[1]=0+2=2
である。
これの一の位が2=a[1]である。

以下同じように計算していきますと、a[n],S[n],T[n],b[n]は下のようになると思います。
n a[n] S[n] T[n] b[n] 
0   5   25    0    0
1   2   20    4    2
2   6   64   24    2
3   0   24   36    6
4   9  126   36    3
5   8  116  140   12
6   2  160  104   12
7   1  114  109   17
8   2  129  164   13
9   8  244  156   14
10  1  166  150   25
11  9  240  104   19
12  9  194  324   25
13  5  374  283   21
14  2  303  282   39
15  6  342  378   34
16  5  428  396   37
17  2  416  306   46
18  2  326  262   46
19  9  352  445   37

n=15までは???さんのコメントと一致していることは確認できました。
さらに、例えばn=19つまり20桁の数字なら
92256259918212890625
と予想されます。
次はa[0]=6も試してみます。
足して100...1になっているようなら正しそうですが果たして… (^^;)
返信 編集