Big Pattern Number

2 secs 1024 MB
OxOmiso's icon OxOmiso

X(n)X_{(n)} を10進法で表した X(10)X_{(10)} は次のように表せられます:

X(10)=X_{(10)}= 0+1n+2n2+...+(n1)(nn1)+0nn+1nn+1+...+(n1)nan10+1*n+2*n^2+...+(n-1)*(n^{n-1})+0*n^n+1*n^{n+1}+...+(n-1)*n^{a*n-1}

nnaa の制約から,愚直に計算すると間に合いません。

作問者の解法を説明します。(これ以外に簡素な解法があると思います。)
N=X(10)nX(10)N = X_{(10)} - n*X_{(10)} として,NN を考える。
すると,N=n+n2+...+nn1(n1)nn+nn+1+nn+2+...+n2n1(n1)n2n+...+(n1)nan1(n1)nanN = n+n^2+...+n^{n-1}-(n-1)*n^{n}+n^{n+1}+n^{n+2}+...+n^{2n-1}-(n-1)*n^{2n}+...+(n-1)*n^{an-1}-(n-1)*n^{an} である。

NN は,(初項 nn ,公比 nn ,項数 an1an-1 の等比数列の和) - (初項 nnn^n ,公比 nnn^n,項数 a1a-1 の等比数列の和) - (n1)nan(n-1)*n^{an} と表せられるので,これを和の公式を用いて計算することで,計算量を削減できます。
割り算をする際の余りの取り方に注意してください。

a=1a=1 の場合の等比数列の和を求め,がんばる(追記します)方法もあります。こちらの方が楽です。