前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Fibonacci

Fibonacci

作者头像
AngelNH
发布2020-04-16 15:41:32
4000
发布2020-04-16 15:41:32
举报
文章被收录于专栏:AngelNI

关于斐波那契的一些事

Fibonacci

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因[数学家]列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为兔子数列.

代码语言:javascript
复制
定义如下:
    F(0) = 0 ,F(1) = 1;
    f(n) = F(n-1)+F(n-2)

性质

代码语言:javascript
复制
1性质一:模除周期性

数列的数模除某个数的结果会呈现一定周期性,因为数列中的某个数取决与前两个数,一旦有连着的两个数的模除结果分别等于第0 第一项的模除结果,那麽代表着一个新的周期的的开始,如果模除n,则每个周期中的元素不会超过n×n;

性质二:黄金分割

随着i的增大F(n) / F(n-1) 接近于0.618

性质三:平方与前后项

从第二项开始,每个奇数项的平方都比前后两项之积多一,每个偶数项的平方比前后两项之积少一.

性质四:

斐波那契数列的第n+2项代表了集合{1,2,...n}中所有不包含相邻正整数的子集的个数.

性质五:求和

F1 + F3 +F5 +F7 ....+F(2*n-1)  =  F(2n) - F(2) + F(1)

F2 + F4 + F6 + F8 +...+F(2n) = F(2n+1) - F(1)

F1^2 + F2^2 + F3^2 + F4^2 + ... +Fn^2 = F(n)*F(n-1)

性质六:两倍项关系

F(2n) / F(n) = F(n-1) + F(n+1)

性质七:尾数循环

个位数:周期60

最后两位:300

最后三位:1500

其他:
F(n-1) * F(n+1) - F(n)^2 = (-1)^n

F(1) + 2F(2) + 3F(3) + ... + nF(n) = nF(n+2) - F(n+3) +2

Calculate

1,数学公式计算

代码语言:javascript
复制
double po(double a,int n)
{
    for(int i =1;i<=n;++i)
        a*=a;
    return a;
}
double solve1(int n)
{
    return 1/sqrt(5)*(po(((1+sqrt(5))/2),n)-po(((1-sqrt(5))/2),n));
}

2,递归

代码语言:javascript
复制
ll solve3(ll n)
{
    if(n==0)
        return 0;
    else if(n==1||n==2)
        return 1;
    else
    {
        return solve3(n-1)+solve3(n-2);
    }
    
}

3,递推

代码语言:javascript
复制
ll solve2(ll n)
{
    F[0] = 0;
    F[1] = 1;
    F[2] = 1;
    if(n==1||n==0||n==2)
        return F[n];
    else
    {
        for(ll i =3;i<=n;++i)
        {
            F[i] = F[i-1]+ F[i-2];
        }
        return F[n];
    }
}

4,分治

代码语言:javascript
复制
ll solve4(ll n)
{
    //分治
    if(n == 0)
        return 0;
    if(n==1||n==2)
        return 1;
    
    ll first = 0;
    ll second = 1;
    while(0 < n--)
    {
        second += first; 
        first = second - first; 
    }
    return first + second;

}

4,矩阵快速幂

代码语言:javascript
复制


#include <iostream>
#include<cstring>
#include<stdio.h>
using namespace std;
typedef long long ll;
const int mod=10000;
int f=2;
struct node
{
	ll materix[5][5];
};

node mul(node a,node b)  //矩阵乘法 
{
	node res;
	memset(res.materix,0,sizeof res.materix);
	for(int i=1;i<=f;i++)
		for(int j=1;j<=f;j++)
			for(int k=1;k<=f;k++)
				res.materix[i][j]=(res.materix[i][j]+a.materix[i][k]*b.materix[k][j])%mod;
	return res;	
}

node ksm(node a,ll b)
{
	node ans;
	memset(ans.materix,0,sizeof ans.materix);
	for(int i=1;i<=f;i++)
		ans.materix[i][i]=1;
	while(b)
	{
		if(b&1)
			ans=mul(ans,a);
		b>>=1;
		a=mul(a,a);
	}
	return ans;
}

int main()
{
	ll N;
	while(cin>>N&&N!=-1)
	{
		if(N==1||N==2)
			printf("1\n");
		if(N==0)
			printf("0\n");
		else
		{
			node a,b;
			a.materix[1][1]=1; a.materix[1][2]=1;
			a.materix[2][1]=1; a.materix[2][2]=0;   //a是那个幂矩阵,
			b.materix[1][1]=1; b.materix[1][2]=0;
			b.materix[2][1]=1; b.materix[2][2]=0;   //b是最初始的矩阵
			node ans = ksm(a ,N-2);  
			ans = mul(ans ,b) ;
			printf("%d\n",ans.materix[1][1] ) ;
		}
	}
	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-02-27|,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Fibonacci
  • 性质
  • Calculate
    • 1,数学公式计算
      • 2,递归
        • 3,递推
          • 4,分治
            • 4,矩阵快速幂
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档