Description
In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2.
Input
a single line containing n (where 0 ≤ n ≤ 100,000,000,000)
Output
print Fn mod 1000000007 in a single line.
Sample Input
99999999999
Sample Output
669753982
题:求斐波那契数列的第n项mod1000000007.。
之后,,它后面有个小提示:矩阵快速幂;
然后我就去借了一个模板过来A掉了
#include<stdio.h>
#include<iostream>
#include<map>
#include<algorithm>
#include<cstring>
#include<string.h>
#include<math.h>
#include<vector>
#include<map>
using namespace std;
typedef long long ll;
#define MAXN 100005
#define INF 0x3f3f3f3f//将近int类型最大数的一半,而且乘2不会爆int
#define MOD 1000000007
struct node
{
ll a[2][2];
} stu;
node mulp(node x, node y) //矩阵x*矩阵y
{
node tem;
memset(tem.a, 0, sizeof(tem.a));
for(int i=0; i<2; ++i)
for(int j=0; j<2; ++j)
for(int k=0; k<2; ++k)
tem.a[i][j]= (tem.a[i][j]+x.a[i][k]*y.a[k][j])%MOD;
return tem;
}
ll qaq(node ans, ll b)
{
stu.a[0][0] = stu.a[1][1] = 1; //单位矩阵
stu.a[0][1] = stu.a[1][0] = 0;
while(b)
{
if(b&1)
stu = mulp(stu, ans);
ans = mulp(ans, ans);
b >>= 1;
}
return stu.a[1][0];
}
int main()
{
ll n;
while(cin >>n)
{
node x = {1, 1, 1, 0};
cout << qaq(x, n) << '\n';
}
return 0;
}