斐波那契数列大家都非常熟悉。它的定义是:
f(x)=1⋯(x=1,2)f(x)=1⋯(x=1,2)
f(x)=f(x−1)+f(x−2)⋯(x>2)f(x)=f(x−1)+f(x−2)⋯(x>2)
对于给定的整数 nn 和 mm,我们希望求出:
f(1)+f(2)+⋯+f(n)f(1)+f(2)+⋯+f(n) 的值。但这个值可能非常大,所以我们把它对 f(m)f(m) 取模。
公式如下:
(∑i=1nf(i) mod f(m))(∑i=1nf(i)modf(m))
但这个数字依然很大,所以需要再对 p 求模。
#include <iostream>
using namespace std;
int main()
{
// 请在此输入您的代码
long long m,n,p;
cin>>n>>m>>p;
// scanf("%d%d%d",&n,&m,&p);
// cin>>n;
// cin>>m;
// cin>>p;
long long a=1;
long long b=1;
long long s=2;
long long c=0;
long long fm=0;
for(long long i=3;i<=n;i++){
c=a+b;
a=b;
b=c;
s+=c;
if(i==m){
fm=c;
}
}
if(m>n){
for(long long j=n+1;j<=m;j++){
c=a+b;
a=b;
b=c;
}
fm=c;
}
cout<<s%fm%p<<endl;
return 0;
}
运行后通过一部分测试用例