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

简介: Best Solver Problem's Link   Mean:  给出x和M,求:(5+2√6)^(1+2x)的值。x

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

 

目录
相关文章
|
1月前
PTA-求平方与倒数序列的部分和
求平方与倒数序列的部分和
19 1
|
7月前
洛谷P1067多项式输出
洛谷P1067多项式输出
|
10月前
|
Python
Python实现求取素数
Python实现求取素数
197 0
074.K阶斐波那契序列
074.K阶斐波那契序列
44 0
7-1 一元多项式求导 (10 分)
7-1 一元多项式求导 (10 分)
85 0
|
算法 测试技术
每日算法刷题Day4-完全数、分情况输出、平方矩阵、斐波那契数列匹配输出
⭐每日算法题解系列文章旨在精选重点与易错的算法题,总结常见的算法思路与可能出现的错误,与笔者另一系列文章有所区别,并不是以知识点的形式提升算法能力,而是以实战习题的形式理解算法,使用算法。
113 0
康托展开公式与全排列应用
康托展开公式与全排列应用
99 0
|
机器学习/深度学习 算法
卡特兰数(Catalan Number) 算法、数论 组合~
卡特兰数(Catalan Number) 算法、数论 组合~
200 0
卡特兰数(Catalan Number) 算法、数论 组合~
|
机器学习/深度学习
【组合数学】递推方程 ( 特解形式 | 特解求法 | 特解示例 )
【组合数学】递推方程 ( 特解形式 | 特解求法 | 特解示例 )
235 0
|
机器学习/深度学习 人工智能 算法
动态规划:二项式序列
今天,我终于理解了帕斯卡三角的实际应用。
292 0