一句话题意:求斐波那契数列第n项,如果位数大于8,则只显示最前4位和最后4位。
题解:对于最后4位,套斐波那契数列的矩阵快速幂模板,MOD为10000即可。
而对于最后4位: 已知斐波那契数列通项公式f(n)=(1/√5) * [((1+√5)/2)^n-((1-√5)/2)^n];
取对数log10(f(n))=log10(1/√5)+log10( ((1+√5)/2)^n*( 1-[ ((1-√5)/2)/((1+√5)/2) ]^n ) ;
即:log10(f(n))=-0.5*log10(5) + n*log10((1+√5)/2)+log10(1-((1-√5)/(1+√5))^n);
当n较大时,((1-√5)/(1+√5))^n趋近于0,则log10(1-((1-√5)/(1+√5))^n)这一项趋近于0,所以可以省略掉。 故在求出-0.5*log10(5) + n*log10((1+√5)/2)后,假设值为X.abcdef,再求10^X.abcdef即为第n项数列的粗略值,将其乘上1000,所取整数部分就是这一项的前4位了。
1 #include
2 #include
3 #include
4 #include
5 #include
6 #include <set>
7 #include
8 #include
9 #include