斐波那契数列记录项

前言:f[n]=f[n-1】+f[n-2];f[0]=0,f[1]=1;

这是斐波那契数列公式。如果要求F[N],要计算N次;

更一般的知道其只与n有关的公式:

Fn=5√5((1+5√2)n−(1−5√2)n)

Fn=5√5((1+5√2)n−(1−5√2)n)

Fn=5√5((1+5√2)n−(1−5√2)n)

a=sqrt(5)/5;

b=(1+sqrt(5))/2;

c=(1-sqrt(5))/2;

fn=a(b^n-c^n);(不会Latex的痛,

如果答案是Mod的话,运算时有问题的,当然可以矩阵快速米之类的。

但是我说一种数学上的傻逼方法。

如果mod 是一个素数,而且mod=5k+1或者mod=5k-1;

那么讲会有简洁方法;

构造一个等式  x*x-x-1=0 其解刚好是b,a;

结论对于一个这样的Mod一定能找打在Zp下的平方根(http://math.stackexchange.com/questions/523351/square-root-of-5-in-modulo-prime-field

比如:mod=99991

x*x-x-1(%99991)==(x-55048*(x-44944)%99991=x^2-99992x+2474077312(%99991);

所以求解的时候愉快的快速米,逆元就好了。可能你会说还是没构造矩阵来的快。

引入一个问题:求前n的斐波那契数列的sum%1000000009的值,n<=1000000009;

怎么做?

构造矩阵似乎比较难构造。

如果找到a,b即能sqrt(5)%10^9+7的话似乎就是等比数列

10^9+9的 a,b分别是 

 308495997, b=691504013;

fn=(a^n-b^n)/(a-b)  【a,b的值是前面的】

那么Sn=f1+f2+f3+...fn;

=a^1+a^2+a^3+...a^n-b^1-b^2-...b^n/(a-b) % mod ;

=(a^(n+1)-a)/(a-1)-{(b^(n+1)-b} /(b-1)  / (a-b) ;

这些都很好求啊。

还有一些在其他运用上

99991

时间: 2024-11-11 12:58:22

斐波那契数列记录项的相关文章

给定斐波那契数列的项数求对应的数值的普通方法和优化处理

1 /** 2 给定斐波那契数列的项数求对应的数值 3 参考:剑指Offer 4 */ 5 #include <stdio.h> 6 7 int fib(int n); 8 long long fibonacci(unsigned int n); 9 int main(int argc, const char * argv[]) { 10 11 int n; 12 13 while (1) { 14 15 printf("请输入你想知道到的斐波那契数列的项数:\t"); 1

斐波那契数列偶数项的和--Python

斐波那契数列(从第三项开始)的每一项的值均等于前两项之和.将第一项和第二项取1和2,那么数列的前10项将是:1,2,3,5,8,13,21,34,55,89……考虑斐波那契数列所有值不超过4000000的项,求出所有值为偶数的项的和.

快速求斐波那契数列(矩阵乘法+快速幂)

斐波那契数列 给你一个n:f(n)=f(n-1)+f(n-2) 请求出 f(f(n)),由于结果很大请 对答案 mod 10^9+7; 1<=n<=10^100; 用矩阵乘法+快速幂求斐波那契数列是经典应用: 矩阵公式 C i j=C i k *C k j; 根据递推式 构造2*2矩阵: 原始矩阵 1 0 0 1 矩阵 2 1 1 1 0 原始矩阵与矩阵 2相乘达到转化状态效果: 对矩阵二进行快速幂 乘法:达到快速转化矩阵的效果: 即使达到快速转化状态:那么大的数据范围也很难求解: 高精?这有

vijos - P1543极值问题(斐波那契数列 + 公式推导 + python)

P1543极值问题 Accepted 标签:[显示标签] 背景 小铭的数学之旅2. 描述 已知m.n为整数,且满足下列两个条件: ① m.n∈1,2,-,K ② (n^ 2-mn-m^2)^2=1 编一程序,对给定K,求一组满足上述两个条件的m.n,并且使m^2+n^2的值最大.例如,若K=1995,则m=987,n=1597,则m.n满足条件,且可使m^2+n^2的值最大. 格式 输入格式 输入仅一行,K的值. 输出格式 输出仅一行,m^2+n^2的值. 样例1 样例输入1[复制] 1995

Python 斐波那契数列练习

# coding=gbk # 迭代法---1 def fibonacci (n): if n == 0 or n == 1: return n else : a = 0 b = 1 for i in range (n-1) : t = a a = b b = a + t return b number = eval (input ("请输入您要计算的斐波那契数列的项\n")) cc= fibonacci (number) print (cc) # 迭代法---2 def fibonac

【CF446C】DZY Loves Fibonacci Numbers (线段树 + 斐波那契数列)

Description ? 看题戳我 给你一个序列,要求支持区间加斐波那契数列和区间求和.\(~n \leq 3 \times 10 ^ 5, ~fib_1 = fib_2 = 1~\). Solution ? 先来考虑一段斐波那契数列如何快速求和,根据性质有 \[ \begin {align} fib_n &= fib_{n - 1} + fib_{n - 2} \ &= fib_ {n - 2} + fib_{n - 3} + fib_{n - 2} \ &= fib_{n -

poj 3070 Fibonacci (矩阵快速幂求斐波那契数列的第n项)

题意就是用矩阵乘法来求斐波那契数列的第n项的后四位数.如果后四位全为0,则输出0,否则 输出后四位去掉前导0,也...就...是...说...输出Fn%10000. 题目说的如此清楚..我居然还在%和/来找后四位还判断是不是全为0还输出时判断是否为0然后 去掉前导0.o(╯□╰)o 还有矩阵快速幂的幂是0时要特判. P.S:今天下午就想好今天学一下矩阵乘法方面的知识,这题是我的第一道正式接触矩阵乘法的题,欧耶! #include<cstdio> #include<iostream>

用递归法计算斐波那契数列的第n项

   斐波纳契数列(Fibonacci Sequence)又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理.准晶体结构.化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1960年代起出版了<斐波纳契数列>季刊,专门刊载这方面的研究成果. [Fibonacci.cpp] #include<iostream>#

c语言:写一个函数,输入n,求斐波拉契数列的第n项(5种方法,层层优化)

写一个函数,输入n,求斐波拉契数列的第n项. 斐波拉契数列:1,1,2,3,5,8...,当n大于等于3时,后一项为前面两项之和. 解:方法1:从斐波拉契数列的函数定义角度编程 #include<stdio.h> int fibonacci(int n) { int num1=1, num2=1, num3=0,i; if (n <= 2) { printf("斐波拉契数列的第%d项为:%d\n",n,num1); } else { for (i = 2; i <