矩阵快速幂求斐波拉切数列
2013-05-20 22:46
169 查看
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define ll long long
#define N 2
struct matrix
{
ll m
;
};
ll ans
,temp
;
matrix mul(ll a
,ll b
)
{
int i,j,k;
matrix ret={0};
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
for(k=0;k<N;k++)
{
ret.m[i][j]+=a[i][k]*b[k][j];
}
}
}
return ret;
}
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
matrix ans,temp;
ans.m[0][0]=1;ans.m[0][1]=0;
ans.m[1][0]=0;ans.m[1][1]=0;
temp.m[0][0]=1;temp.m[0][1]=1;
temp.m[1][0]=1;temp.m[1][1]=0;
while(n)
{
if(n&1)ans=mul(ans.m,temp.m);
temp=mul(temp.m,temp.m);
n>>=1;
}
printf("%I64d\n",ans.m[0][0]+ans.m[1][0]);
}
return 0;
}
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define ll long long
#define N 2
struct matrix
{
ll m
;
};
ll ans
,temp
;
matrix mul(ll a
,ll b
)
{
int i,j,k;
matrix ret={0};
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
for(k=0;k<N;k++)
{
ret.m[i][j]+=a[i][k]*b[k][j];
}
}
}
return ret;
}
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
matrix ans,temp;
ans.m[0][0]=1;ans.m[0][1]=0;
ans.m[1][0]=0;ans.m[1][1]=0;
temp.m[0][0]=1;temp.m[0][1]=1;
temp.m[1][0]=1;temp.m[1][1]=0;
while(n)
{
if(n&1)ans=mul(ans.m,temp.m);
temp=mul(temp.m,temp.m);
n>>=1;
}
printf("%I64d\n",ans.m[0][0]+ans.m[1][0]);
}
return 0;
}
相关文章推荐
- 矩阵快速幂 求斐波拉切数列的第n项 poj3070
- <矩阵快速幂>codevs 3332 数列
- 快速获取数列/矩阵中前项元素累积和
- 洛谷 P1939 【模板】矩阵加速(数列):优化递推式的方法——矩阵快速幂
- Xn数列(矩阵乘法+快速幂+慢速乘法)
- 【矩阵快速幂】数列
- 第八场多校联盟 Problem D: 数列问题 【矩阵快速幂】
- NZAU 1202: GCD 矩阵快速幂 gcd和fib数列一些结论
- 斐波那契数列 打表+矩阵快速幂
- codevs 3332 数列(矩阵快速幂)
- 【矩阵快速幂相乘求Fibonacci 数列】PKU-3070-Fibonacci
- 矩阵乘法快速幂 codevs 1574 广义斐波那契数列
- UVA 10689 Yet another Number Sequence(矩阵快速幂求Fib数列)
- hdu3221 Brute-force Algorithm 裴波那锲数列 矩阵快速幂
- 快速计算类似斐波那契数列数列的数列的第N项,矩阵快速幂
- UVA 10689 Yet another Number Sequence(矩阵快速幂求Fib数列)
- 矩阵快速幂/矩阵加速线性数列 By cellur925
- 【模拟试题】数列 矩阵快速幂
- 斐波那契数列数组递推,普通递归,记忆化搜索,矩阵快速幂,和公式法
- 斐波那契数列的第N项(1≤n≤10^18 矩阵快速幂)