特征根法求通项+广义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

再使用该特征方程反向推导出递推公式为: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,对于每一个模数,都存在循环节。

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

Time complexity: O(N)

Source code: 

 

特征根法在求递推数列通项中的运用

时间: 2024-12-29 07:04:18

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

广义Fibonacci数列找循环节

遇到了2019ICPC南昌赛区的网络赛的一道题,fn=3*fn-1+2*fn-2,有多次询问求fn.总结起来其实就是在模P意义下,O(1)回答广义斐波那契额数列的第n项,可以说是一道模板题了. 这道题的解法有两种:①求出通项公式之后,用二次剩余+优化快速幂(可以k进制快速幂或者把快速幂分块)解决.②求出模P意义下的递推结果的循环节,然后给矩阵分块加速递推. 看到大佬说方法一因为受到二次剩余的局限(求出的根号可能在模P意义下开不了)并不是十分通用,这里就只提到了第二张办法. 首先是怎么求广义斐波那

广义Fibonacci数列模n的循环节

见这里:http://blog.csdn.net/ACdreamers/article/details/25616461 有详细的分析推理 只找出了循环节的上限,设 f[n] = (af[n - 1] + b[n - 2])%P,设序列a ={ f[1], f[2] }, 考虑t项后, b ={ f[t + 1], f[t + 2] }, 当t = p * p + 1时, 最多可以产生p * p + 1个不同的序列,其中至少会有一个与a相同, 而一旦与a相同,那么后面的项也会与a后面的项一样,所

HDU 5451 Best Solver(fibonacci)

感谢这道题让我复习了一遍线代,还学习了一些奇奇怪怪的数论. 令 二项展开以后根号部分抵消了 显然有 所以要求的答案是 如果n比较小的话,可以直接对二项式快速幂,但是这题n很大 这个问题和矩阵的特征值以及数列递推有奇怪的联系 广义的fibonacci数列的形式如下 写成矩阵形式就是 有一个奇怪的结论: 其中lambda1,lambda2是递推矩阵的特征值,此处只讨论lambda1!=lambda2的情况. 这个奇怪的结论其实很容易证明, 根据以上结果,利用矩阵的数乘和分配律然后归纳就可以完整得到结

ACM学习历程—HDU 5451 Best Solver(Fibonacci数列 &amp;&amp; 快速幂)(2015长春网赛1007题)

Problem Description The so-called best problem solver can easily solve this problem, with his/her childhood sweetheart. It is known that y=(5+2√6)^(1+2^x).For a given integer x (0≤x<2^32) and a given prime number M (M≤46337) , print [y]%M . ([y] mean

hdu 3054 Fibonacci 找循环节的公式题

Fibonacci Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Problem Description We know the Fibonacci Sequence F1=1,F2=1,F3=2,F4=3,F5=5, ... Fx = Fx-1+Fx-2 We want to know the Mth number which has K consecutive "0&qu

模板题 + KMP + 求最小循环节 --- HDU 3746 Cyclic Nacklace

Cyclic Nacklace Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=3746 Mean: 给你一个字符串,让你在后面加尽量少的字符,使得这个字符串成为一个重复串. 例: abca---添加bc,成为abcabc abcd---添加abcd,成为abcdabcd aa---无需添加 analyse: 经典的求最小循环节. 首先给出结论:一个字符串的最小循环节为:len-next[len]. 证明: 举个例子:abcab

UVA 11582 Colossal Fibonacci Numbers!(循环节打表+幂取模)

题目链接:https://cn.vjudge.net/problem/UVA-11582 1 /* 2 问题 3 输入a,b,n(0<a,b<2^64(a and bwill not both be zero) and 1<n<1000) 4 计算并输出f(a^b)%n的结果 5 其中f(i)是斐波那契数列 6 7 解题思路 8 所有的结果都是f(i)对n取模,不妨设F(i)=f(i)%n.不难发现当F(i),F(i+1)出现重复的时候,整个序列就开始出现重复. 9 10 所以设周

KMP + 求最小循环节 --- HDU 1358 Period

Period Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=1358 Mean: 给你一个字符串,让你从第二个字符开始判断当前长度的字符串是否是重复串,如果是,输出当前位置,并输出重复串的周期. analyse: 还是next数组的运用,详见上一篇博客. Time complexity: O(N) Source code:  /** this code is made by crazyacking* Verdict: Acce

HDU 5451 广义斐波那契数列

这道题目可以先转化: 令f(1) = 5+2√6 f(2) = f(1)*(5+2√6) ... f(n) = f(n-1)*(5+2√6) f(n) = f(n-1)*(10-(5-2√6)) = 10*f(n-1)-(5-2√6)f(n-1) = 10*f(n-1) - 10/(5+2√6) f(n-1) = 10*f(n-1) - 10/(5+2√6) * (5+2√6)f(n-2) = 10*f(n-1) - f(n-2) 那么就可以写成矩阵相乘的形式了 (f(n) , f(n-1))