数学套路题.
考虑将 $\frac {b+\sqrt d}{2}$ 写成某个递推数列的特征方程的根.
设数列 $a_i=A\cdot (\frac{b+\sqrt d}{2})^i+B\cdot (\frac{b-\sqrt d}{2})^i$ .
可以根据韦达定理得出该数列的递推式 $a_i=b\cdot a_{i-1}+\frac{d-b^2}{4}\cdot a_{i-2}$ .
令 $A=B=1$ ,得到这个数列的前两项 $a_1=b,a_2=\frac{b^2+d}{2}$ .
由于 $b\bmod 2=1,d\bmod 4=1$ ,所以 $\frac {d-b^2}{4},\frac{b^2+d}{2}$ 一定是个整数.
于是可以用矩阵快速幂求出 $a_n$ .
而 $(\frac{b+\sqrt d}{2})^n=a_n-(\frac{b-\sqrt d}{2})^n$ ,答案需要向下取整.
有限制 $0<b^2\leq d<(b+1)^2$ ,所以有 $(\frac {b-\sqrt d}{2})^n\in(-1,0]$ .
于是当且仅当 $b^2<d,n\bmod 2=0$ 时,答案为 $a_n-1$ ,其余情况为 $a_n$ .
时间复杂度 $O(\log n)$ .
1 | //%std |