dp专辑 G - Fibonacci [ 快速幂]
来源:互联网 发布:淘宝直播论坛手机版 编辑:程序博客网 时间:2024/06/05 04:19
第一反映这一题也属于DP???是数学题呀,呵呵~不管了,开始做了......
题意:
求 斐波那契数列 的第n项,输出Fn mod 10000
思路:
快速幂
模板:
long long qpow(int a, int b)
{
long long c, d;
c = 1; //存a^b
d = a; //存a的倍幂
while (b > 0)
{
if (b & 1) //或 if (b % 2 == 1)
c *= d;
b = b >> 1; //或 b = b / 2
d = d * d;
}
return c;
}
稍微修改下就可以了~
//AC CODE:
#include<iostream>#include<cmath>#include<algorithm>#include<vector>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>using namespace std;struct Mat{ int p[2][2];};Mat mul(Mat c, Mat b){ Mat result; result.p[0][0] = (c.p[0][0]*b.p[0][0] + c.p[0][1]*b.p[1][0]) % 10000; result.p[0][1] = (c.p[0][0]*b.p[0][1] + c.p[0][1]*b.p[1][1]) % 10000; result.p[1][0] = (c.p[1][0]*b.p[0][0] + c.p[1][1]*b.p[1][0]) % 10000; result.p[1][1] = (c.p[1][0]*b.p[0][1] + c.p[1][1]*b.p[1][1]) % 10000; return result;}int qpow(int N){ Mat c, d; c.p[0][0] = 1; c.p[0][1]=0; c.p[1][0]=0; c.p[1][1]=1; //存a^b d.p[0][0] = 1; d.p[0][1]=1; d.p[1][0]=1; d.p[1][1]=0; //存a的倍幂 while (N > 0) { if (N & 1) //或 if (b % 2 == 1) c = mul(c,d); N = N >> 1; //或 b = b / 2 d = mul(d,d); } return c.p[0][1];}int main(){ int N; while(scanf("%d",&N)!=EOF&& N!=-1) { printf("%d\n",qpow(N)); } return 0;}
- dp专辑 G - Fibonacci [ 快速幂]
- dp专辑
- Fibonacci 数列快速幂
- 【矩阵快速幂】Fibonacci
- Fibonacci 矩阵快速幂
- Fibonacci 矩阵快速幂
- Fibonacci (矩阵快速幂)
- Fibonacci 快速幂矩阵
- GYM 101061 G.Repeat it(dp+矩阵快速幂)
- poj3070 Fibonacci 矩阵快速幂
- 3070Fibonacci{矩阵快速幂}
- poj3070 Fibonacci 矩阵快速幂
- POJ - Fibonacci 【快速幂 + 矩阵】
- 矩阵快速幂求Fibonacci
- POJ3070 - Fibonacci - 矩阵快速幂
- UVA10229Modular Fibonacci(矩阵快速幂)
- POJ3070 Fibonacci(矩阵快速幂)
- fibonacci数列矩阵快速幂
- PXE——Centos 6.0(DHCP,tftp,http,kickstart)
- 运用递归 删除父节点同事删除子节点
- Fetion 2011 破解面板宽度限制
- 判断指针状态 Demo
- Request Free License Key and Install SAP License Key using SLICENSE Transaction Code
- dp专辑 G - Fibonacci [ 快速幂]
- python3 多线程
- 读C++ Primer 之构造函数陷阱
- adplus抓取dmp文件,crash和hang两种方式
- 异常牛X的Policy
- 那些输入输出函数
- Oracle Architecture
- Android开发笔记之adb参数指南
- android-菜单键,返回键,搜索键的重写