特征根法求通项+广义Fibonacci数列找循环节 - HDU 5451 Best Solver

Best Solver

Problem's Link


 

Mean: 

给出x和M,求:(5+2√6)^(1+2x)的值。x<2^32,M<=46337.

analyse:

这题需要用到高中的数学知识点:特征根法求递推数列通项公式。

方法是这样的:

对于这题的解法:

记λ1=5+2√6,λ2=5-2√6,则λ1λ2=1,λ1+λ2=10

根据韦达定理可以推导出:λ1,λ2的特征方程为 x^2-10x+1=0

根据λ1=5+2√6,λ2=5-2√6是特征方程x^2-10x+1=0的解,可以求出:b=-10,c=1

再使用该特征方程反向推导出递推公式为:a[n]=10*a[n-1]-a[n-2]

再由特征根法确定通项为:a[n]=(5+2√6)^n+(5-2√6)^n

观察通项,发现(5-2√6)^n<1,(5+2√6)^n>1。并且可以确定(5+2√6)^n的整数部分的值为a[n]-1

到这里,可以利用线性递推公式a[n]=10*a[n-1]-a[n-2],构造矩阵来找循环节。

为什么要找循环节呢?

因为n=2^x相当大,而模数M<=46337,对于每一个模数M,都存在循环节,这样的话我们就不需要完整的计算n次幂运算了。

而且我们发现这些循环节都比较小,所以我们可以直接暴力求矩阵循环节。

Time complexity: O(N+logx)

 

view code

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值