随笔分类 - 数学(组合,数论)
斐波那契数列取模(大数)分治算法
摘要:这是算法课程上完分之策略后老师留的一道题目:菲波那契数列如下:1,1,2,3,5,8,13,21,34......其中a[1] = 1, a[2] = 1, a[n]=a[n-1]+a[n-2](n>=3)。对给定的下标n,求解a[n]%1997的值.其中测试数据n是整数范围内。这个题目,主要是用到很关键的一个数学知识,斐波那契数列的求法,可以转换为矩阵的连乘,矩阵的n此方算法又可以用分治的算法。而且又有理论依据:(n*m)%c=[ (n%c)*(m%c) ]%c ; (n+m)%c=[ (n%c)+(m%c) ]%c ,所以过程中的结果可以随时取模,而不影响最终的结果关于斐波那契数列的
阅读全文
斐波那契数列集锦
摘要:斐波那契序列 集锦 (转)[定理1] 标准Fibonacci序列(即第0项为0,第1项为1的序列)当N大于1时,一定有f(N)和f(N-1)互质其实,结合“互质”的定义,和一个很经典的算法就可以轻松证明对,就是辗转相除法互质的定义就是最大公约数为1数学归纳法是很有用的证明方法,我们接下来这个定理用数学归纳法就很好证明:[定理2]若i为奇数, f(i)*f(i)=f(i-1)*f(i+1)+1,否则f(i)*f(i)=f(i-1)*f(i+1)-1对,这个定理用数学归纳法可以轻松证明,大家有兴趣可以自己尝试[定理3] f(n)=f(i)*f(n-i-1)+f(i+1)*f(n-i)f(n)=f(
阅读全文
高效的组合数计算方法
摘要:计算组合数最大的困难在于数据的溢出,对于大于150的整数n求阶乘很容易超出double类型的范围,那么当C(n,m)中的n=200时,直接用组合公式计算基本就无望了。另外一个难点就是效率。 对于第一个数据溢出的问题,可以这样解决。因为组合数公式为: C(n,m) = n!/(m!(n-m)!)为了避免直接计算n的阶乘,对公式两边取对数,于是得到: ln(C(n,m)) = ln(n!)-ln(m!)-ln((n-m)!)进一步化简得到: 这样我们就把连乘转换为了连加,因为ln(n)总是很小的,所以上式很难出现数据溢出。 为了解决第二个效率的问题,我们对上式再做一步化简。上式已经把连乘法变成了.
阅读全文
浙公网安备 33010602011771号