解析
利用基本运算规则,(a + b) % p = (a % p + b % p) % p ,考虑一个一个递推。写一个flag表示当前求到第几个数,以falg为基准,flag+1为下一个数,flag为当前的数,flag-1为上一个数,
得出递推公式:shulie[flag+1]=shulie[flag]+shulie[flag-1]
因为第1第2个%100000007都是1,所以不用管,但是向后的话需要处理一下。于是从第三个开始每一个结果都%100000007,以达成最后的结果是(a % p + b % p) % p。
代码
#include<bits/stdc++.h> using namespace std; int shulie[100005]; int n; int main() { cin>>n; shulie[1]=1; shulie[2]=1; int flag=2; while(flag!=n) { shulie[flag+1]=shulie[flag]+shulie[flag-1]; shulie[flag+1]=shulie[flag+1]%1000000007;//(a%p+b%p)%p=(a+b)%p flag++; } cout<<shulie[n]<<endl; }