题目描述
大家都知道Fibonacci数列吧,f[1]=1,f[2]=1,f[3]=2,f[4]=3...也就是f[n]=f[n-1]+f[n-2]。现在,问题很简单,输入n和m,求前n项和取模m。
输入
输入n和m
1<=n<=2 000 000 000
1<=m<=1 000 000 010
输出
输出前n项和取模m。
样例输入
5 1000
样例输出
12
我发现了一个牛逼的结论,没有查百度哦!(骄傲
就是斐波那契前n项和Sn=f[n+2]-1
然后直接套了前一题的代码就过了。。
贴前一题的链接:https://blog.youkuaiyun.com/qq_44661312/article/details/98090360
然后上代码:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,m;
struct dd{
ll sq[3][3];
};
//两个矩阵相乘
dd cheng(dd x,dd y)
{
dd g;
//因为矩阵规模较小我就直接写了
g.sq[1][1]=((x.sq[1][1])%m*((y.sq[1][1])%m))%m+((x.sq[1][2])%m*((y.sq[2][1])%m))%m;
g.sq[1][2]&