Hubby 1 for fibby~
来源:互联网 发布:手绘画软件 编辑:程序博客网 时间:2024/06/04 00:46
//快速幂才是关键
#include<iostream>
#define b 1000000007
using namespace std;
long long fib(int n)
{
long long mtx[2][2];
long long base[2][2];
mtx[0][0]=1;mtx[0][1]=0;
mtx[1][0]=0;mtx[1][1]=1;
base[0][0]=1;base[0][1]=1;
base[1][0]=1;base[1][1]=0;
if(n==-1)
return 0;
if(n==0)
return 1;
long long temp1,temp2,temp3,temp4;
while(n!=0)
{
if(n&1==1)
{
temp1=mtx[0][0]*base[0][0]+mtx[0][1]*base[1][0];temp2=mtx[0][0]*base[0][1]+mtx[0][1]*base[1][1];
temp3=mtx[1][0]*base[0][0]+mtx[1][1]*base[1][0];temp4=mtx[1][0]*base[0][1]+mtx[1][1]*base[1][1];
mtx[0][0]=temp1%b,mtx[0][1]=temp2%b;
mtx[1][0]=temp3%b,mtx[1][1]=temp4%b;
}
temp1=base[0][0]*base[0][0]+base[1][0]*base[1][0];temp2=base[0][0]*base[0][1]+base[0][1]*base[1][1];
temp3=base[1][0]*base[0][0]+base[1][1]*base[1][0];temp4=base[1][0]*base[0][1]+base[1][1]*base[1][1];
base[0][0]=temp1%b,base[0][1]=temp2%b;
base[1][0]=temp3%b,base[1][1]=temp4%b;
n=n>>1;
}
return mtx[0][0];
}
int main()
{
int n;
while(cin>>n)
{
cout<<fib(n-1)<<endl;
}
}
#include<iostream>
#define b 1000000007
using namespace std;
long long fib(int n)
{
long long mtx[2][2];
long long base[2][2];
mtx[0][0]=1;mtx[0][1]=0;
mtx[1][0]=0;mtx[1][1]=1;
base[0][0]=1;base[0][1]=1;
base[1][0]=1;base[1][1]=0;
if(n==-1)
return 0;
if(n==0)
return 1;
long long temp1,temp2,temp3,temp4;
while(n!=0)
{
if(n&1==1)
{
temp1=mtx[0][0]*base[0][0]+mtx[0][1]*base[1][0];temp2=mtx[0][0]*base[0][1]+mtx[0][1]*base[1][1];
temp3=mtx[1][0]*base[0][0]+mtx[1][1]*base[1][0];temp4=mtx[1][0]*base[0][1]+mtx[1][1]*base[1][1];
mtx[0][0]=temp1%b,mtx[0][1]=temp2%b;
mtx[1][0]=temp3%b,mtx[1][1]=temp4%b;
}
temp1=base[0][0]*base[0][0]+base[1][0]*base[1][0];temp2=base[0][0]*base[0][1]+base[0][1]*base[1][1];
temp3=base[1][0]*base[0][0]+base[1][1]*base[1][0];temp4=base[1][0]*base[0][1]+base[1][1]*base[1][1];
base[0][0]=temp1%b,base[0][1]=temp2%b;
base[1][0]=temp3%b,base[1][1]=temp4%b;
n=n>>1;
}
return mtx[0][0];
}
int main()
{
int n;
while(cin>>n)
{
cout<<fib(n-1)<<endl;
}
}
0 0
- Hubby 1 for fibby~
- Test 1 for NOIP: Result for Day1
- Test 1 for NOIP: Result for Day2
- Rootkit For Windows(1)
- Mysql5.1 for PHP
- Tips for Cassandra - 1
- while (1) 和 for (;;)
- Notes for OpenGL - 1
- 批处理之1:FOR
- QML for QT 1
- 记录 for JAVA 1
- Kinect for Windows (1)
- for(;;) 和 while (1)
- Code for fun (1)
- lua(1) for循环
- NTCreateDEbugOBject for win8..1
- arcsde10.1 for oracle
- 语句for( ;1;)是什么意思?
- 搜索二维矩阵
- 用Android UI布局创建简单手机界面
- 遍历Map的四种方法
- 前端工具库Bootstrap,jQuery,Underscore
- ThinkPHP框架禁止模块
- Hubby 1 for fibby~
- ReentrantLock之AbstractQueuedSynchronizer 源码分析笔记
- 几个关于文件夹的操作
- C语言的位运算符
- css之margin
- freemarker获取url中的参数
- C# 面向对象之多态
- KNN算法matlab代码实现
- 漫步数学分析三十三——可微的条件