余数的加法定理(关于fn的计算)
理解
刚开始写的时候,我真的是看不懂题目的,然后后面看了一个下午,还去百度,还是看的不是很懂。。。
那时候的我怀疑人生,我是不是智商有问题?后面问了大家,发现很多人都读不懂
我知道了,是大家的阅读理解都不行。。。
后面学长说了,有点懵懵懂懂的,再看了同学发的例题讲解,懂了那么一丢丢叭。。。
题目:求公式fn=fn-1+fn-2;f1=1;f2=1;
要求:输入一个数n,求fn公式对10007的余数
思路与解题方式
刚理解之后,我就想到了大一上海英老师教过的替换(应该是这么叫的吧,具体叫什么记不清了)
大致就是
temp=a;
a=b;
b=temp;
相当于把两个杯子里面的水相互交换,但不能中和
因为题目说是一个整数也没说什么类型的整数,我就全部用了int型
所以就有了以下代码
#include<iostream>
using namespace std;
void main()
{
int n;
int f1=1;
int f2=1;
int i;
int fn=1;
cin>>n;
if(n>1&&n<1000000)
{
for(i=2; i<n; i++)
{
fn=(f1+f2)%10007;
f1=f2%10007;
f2=fn%10007;
}
}
else
{
return ;
}
cout<<fn;
return ;
}
这里还用到了一个数学知识:余数加法定理(a与b的和对c的余数等于a、b分别对c的余数之和,即(a+b)%c=(a%c+b%c)%c)