斐波那契数列VI(原创题)

来源:互联网 发布:电脑硬件状况检测软件 编辑:程序博客网 时间:2024/05/22 06:16

幼儿园数学题II

这天,当一头雾水的LZH同学在考场上痛哭的时候,一旁的YMW早就如切菜一样cut掉了简单至极的第一题,风轻云淡的冲击着满分,然而最后一道题着实难道了他,毕竟是幼儿园副园长树皮和著名毒瘤秋彪为了防止人AK而出的,可是YMW作为ACrush的著名粉丝,向来以AK为目标,永不言败,而他能不能AK就看你了

题目是酱紫的,f(n)-f(3)-f(4)-f(5)-...-f(n-3)-f(n-2)=(n+4)(n-1)/2,f(1)=1,f(2)=1

f(n)的前n项和

 

输入 一个正整数n(保证0<=n<=2^31-1

输出 一个正整数,表示这个图形的整点个数,需要对1000000007求余

 

样例输入1

1

样例输出1

1

样例输入2

2

样例输出2

2


首先把左边的减号整理到右边,为了凑Sn两边加上S(n-1),然后猜测通项公式为f(n)=f(n-1)+f(n-2)+q+p然后用前面几项发现解不出来,再次猜测为一个变量和一个常量,变量构成等差数列,最终解出来f(n)=f(n-1)+f(n-2)+n+1然后矩阵计算S(n)即可

标程:

#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>#include<cmath>#define LL long long#define fo(i,a,b) for(int i=a;i<=b;i++)using namespace std;#define N 5#define inf 1000000007int n,m=5;struct matrix{LL a[N][N];void clear(){memset(a,0,sizeof(a));}matrix operator*(const matrix b)const{matrix anss;fo(i,0,m-1)fo(j,0,m-1){anss.a[i][j]=0;fo(k,0,m-1){anss.a[i][j]+=a[i][k]*b.a[k][j];anss.a[i][j]%=inf;}}return anss;}};matrix I={1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1};matrix A={1,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1};matrix KSM(matrix a,LL k){matrix ret=I;while(k){if(k&1)ret=a*ret;a=a*a;k>>=1;}return ret;}int main(){scanf("%d",&n);if(n==1){cout<<1<<endl;return 0;}matrix ans={2,0,0,0,0,1,0,0,0,0,1,0,0,0,0,3,0,0,0,0,1,0,0,0,0};ans=KSM(A,n-2)*ans;cout<<ans.a[0][0]<<endl;return 0;}


1 0