515Nod 1126 求递推序列的第n项【矩阵快速幂】
生活随笔
收集整理的這篇文章主要介紹了
515Nod 1126 求递推序列的第n项【矩阵快速幂】
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
有一個(gè)序列是這樣定義的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 給出A,B和N,求f(n)的值。 Input 輸入3個(gè)數(shù):A,B,N。數(shù)字之間用空格分割。(-10000?<=?A,?B?<=?10000,?1?<=?N?<=?10^9) Output 輸出f(n)的值。 Input示例 3?-1?5 Output示例 6 #include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <stack>
#include <cstdlib>
#include <iomanip>
#include <cmath>
#include <cassert>
#include <ctime>
#include <map>
#include <set>
using namespace std;
#pragma comment(linker, "/stck:1024000000,1024000000")
#define lowbit(x) (x&(-x))
#define max(x,y) (x>=y?x:y)
#define min(x,y) (x<=y?x:y)
#define MAX 100000000000000000
#define MOD 1000000007
#define pi acos(-1.0)
#define ei exp(1)
#define PI 3.1415926535897932384626433832
#define ios() ios::sync_with_stdio(true)
#define INF 0x3f3f3f3f
#define mem(a) ((a,0,sizeof(a)))
typedef long long ll;
ll A,B,n;
struct matrix
{ll a[3][3];
};
matrix mutiply(matrix u,matrix v)
{matrix res;memset(res.a,0,sizeof(res.a));for(int i=0;i<2;i++)for(int j=0;j<2;j++)for(int k=0;k<2;k++)res.a[i][j]=(res.a[i][j]+u.a[i][k]*v.a[k][j])%7;return res;
}
matrix quick_pow(ll n)
{matrix ans,res;memset(res.a,0,sizeof(res.a));for(int i=0;i<2;i++)res.a[i][i]=1;ans.a[0][0]=A;ans.a[0][1]=B;ans.a[1][0]=1;ans.a[1][1]=0;while(n){if(n&1) res=mutiply(res,ans);n>>=1;ans=mutiply(ans,ans);}return res;
}
int main()
{scanf("%lld%lld%lld",&A,&B,&n);if(n==1) printf("1\n");else if(n==2) printf("1\n");else{while(A<0) A+=7;while(B<0) B+=7;n-=2;matrix ans=quick_pow(n);matrix res;res.a[0][0]=res.a[1][0]=1;ans=mutiply(ans,res);printf("%lld\n",ans.a[0][0]);}return 0;
}
?
轉(zhuǎn)載于:https://www.cnblogs.com/shinianhuanniyijuhaojiubujian/p/8960890.html
總結(jié)
以上是生活随笔為你收集整理的515Nod 1126 求递推序列的第n项【矩阵快速幂】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: zabbix自动发现主机并加入组绑定模板
- 下一篇: 【Selenium】之谷歌、IE、火狐浏