矩阵二分幂求Fib(非结构体版)
来源:互联网 发布:移动短信平台软件 编辑:程序博客网 时间:2024/05/22 02:27
矩阵二分幂求fib模板(0<=n<=10^9),如果取模的数的平方没超过long long,那么n可以满足条件为n<=10^18,速度很快。
#include<stdio.h>#include<string.h>#include<algorithm>#define ll long long#define mod 1000000007using namespace std;ll solve(ll n){ll Ans[2][2]={1,0,0,1};ll Base[2][2]={0,1,1,1};ll temp00=0,temp01=0,temp10=0,temp11=0;while(n){if(n&1){temp00=Ans[0][0],temp01=Ans[0][1];temp10=Ans[1][0],temp11=Ans[1][1];Ans[0][0]=(temp00*Base[0][0]+temp01*Base[1][0])%mod;Ans[0][1]=(temp00*Base[0][1]+temp01*Base[1][1])%mod;Ans[1][0]=(temp10*Base[0][0]+temp11*Base[1][0])%mod;Ans[1][1]=(temp10*Base[0][1]+temp11*Base[1][1])%mod;}temp00=Base[0][0],temp01=Base[0][1];temp10=Base[1][0],temp11=Base[1][1];Base[0][0]=(temp00*temp00+temp01*temp10)%mod;Base[0][1]=(temp00*temp01+temp01*temp11)%mod;Base[1][0]=(temp10*temp00+temp11*temp10)%mod;Base[1][1]=(temp10*temp01+temp11*temp11)%mod;n>>=1;}return Ans[0][1];}int main(){ int t; scanf("%d",&t); while(t--){ ll n; scanf("%lld",&n); ll ans = solve(n); printf("%lld\n",ans);}return 0;}
0 0
- 矩阵二分幂求Fib(非结构体版)
- POJ3070矩阵快速幂求Fib
- fib(限制内存)矩阵+快速幂
- uva 10229 (fib矩阵形式+矩阵快速幂)uva 10518 (fib(n)调用多少次)
- poj3070 矩阵快速幂Fib
- hdu1575 二分+矩阵求幂
- hdu 3221 Brute-force Algorithm(快速幂取模,矩阵快速幂求fib)
- UVA 10689 Yet another Number Sequence(矩阵快速幂求Fib数列)
- hdu 5171 fib矩阵快速幂
- 矩阵快速二分求n次幂
- 用数组求fib函数(复习)
- HDU 1588(数论,构造二分矩阵+求幂运算+二分求和)
- hdu1588 Gauss Fibonacci(矩阵快速幂+二分求矩阵等比和)
- hdu1575:Tr A_矩阵的幂&二分求幂
- HDU - 1588 Gauss Fibonacci (矩阵快速幂+二分求等比数列和)
- 九度oj1443 矩阵乘法加二分求幂
- POJ 3233 二分求等比数列 矩阵快速幂
- 二分求幂—递归非递归两种方法
- 二维码的扫描、生成
- Codeforces Round #307 (Div. 2) E. GukiZ and GukiZiana (分块)
- C++ Primer 学习笔记与思考_8 指针和const的那些麻烦
- 【整理】MATLAB之积分篇
- QString与中文问题
- 矩阵二分幂求Fib(非结构体版)
- bash变量-用户自定义变量和环境变量/
- DLX (Dancing Links/舞蹈链)算法——求解精确覆盖问题
- Qt 编码问题QTextCodec
- iOS开发:TabBar的图片不显示,只显示灰色的正方形
- 安卓-屏幕适配方式
- Java 1.8 HashMap实现(译注)
- 九度oj 1128
- (转载)pbrt学习笔记 --kd树的一点优化技巧