dp[i][j] を、長さ i の、各要素が 1 以上 M−1 以下の D でない整数で、総和を M で割った余りが j である数列の数とします。
j が D の倍数でないような dp[i][j] は、i が同じならば全て等しいので、bi とします。
また、M/D=K とし、dp[i][kD]=ai,k (0≤k<K) とします。
a,b についての漸化式は、
ai+1,0ai+1,1ai+1,2⋮ai+1,K−2ai+1,K−1bi+1=001⋮111100⋮111110⋮111111⋮111………⋱………111⋮111111⋮011111⋮001011⋮101M−KM−KM−K⋮M−KM−KM−K−2ai,0ai,1ai,2⋮ai,K−2ai,K−1bi
なので、
aN,0aN,1aN,2⋮aN,K−2aN,K−1bN=001⋮111100⋮111110⋮111111⋮111………⋱………111⋮111111⋮011111⋮001011⋮101M−KM−KM−K⋮M−KM−KM−K−2N100⋮000
であり、係数行列は K+1 次の正方行列なので、繰り返し二乗法によって、答えである aN,0 は時間計算量 O((DM)3logN) で計算することができます。