- #include
- #include
- #include
- using namespace std;
- typedef long long LL;
- //////////////////////////////
- LL T,n,f1,f2,ans;
- ///////////////////////////////
- const long longN=6;
- const long longmod=1000000007;
- struct Mat
- {
- long long mat[N][N];
- };
- Mat Mut(Mat a,Mat b)
- {
- long long i,j,k;
- Mat c;
- memset(c.mat,0,sizeof(c.mat));
- for(k=0; k)
- {
- for(i=0; i)
- {
- if(a.mat[i][k])
- for(j=0; j)
- {
- if(b.mat[k][j])
- c.mat[i][j]=c.mat[i][j]+a.mat[i][k]*b.mat[k][j]%mod;
- c.mat[i][j]=c.mat[i][j]%mod;
- }
- }
- }
- return c;
- }
- Mat Pow(Mat a,long long n)
- {
- long long i,j;
- Mat c;
- for(i =0; i < N; ++i)
- for(j =0; j < N; ++j)
- c.mat[i][j] = (i == j);
- for(; n; n>>=1)
- {
- if(n&1) c=Mut(c,a);
- a=Mut(a,a);
- }
- return c;
- }
- LL f(Mat A,long long n)
- {
- Mat A_;
- A_=Pow(A,n);
- LL ret=0;
- ret=(ret+A_.mat[1][0]*f2)%mod;
- ret=(ret+A_.mat[1][1]*f1)%mod;
- ret=(ret+A_.mat[1][2]*0)%mod;
- ret=(ret+A_.mat[1][3]*1)%mod;
- ret=(ret+A_.mat[1][4]*0)%mod;
- ret=(ret+A_.mat[1][5]*(-1))%mod;
- return(ret+mod)%mod;
- }
- //=============================
- Mat A;
- int main()
- {
- memset(A.mat,0,sizeof(A.mat));
- A.mat[0][0]=1;A.mat[0][1]=1;A.mat[0][2]=1;
- A.mat[1][0]=1;
- A.mat[1][1]=0;
- A.mat[2][5]=1;
- A.mat[3][2]=1;
- A.mat[4][3]=1;
- A.mat[5][4]=1;
- while(cin>>f1>>f2>>n)
- {
- // for(int n=1; n<15; n++)
- // {
- if(n==1)
- {
- cout<endl;
- continue;
- }
- if(n==2)
- {
- cout<endl;
- continue;
- }
- ans=f(A,n-1);
- cout<endl;
- // }
- }
- }
来源: http://www.bubuko.com/infodetail-1969926.html