蓝桥杯入门训练——Fibonacci数列

太久没做过算法题,有点生手,被一道简单题给卡住了。(╯▔皿▔)╯

问题描述
Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。

当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。

输入格式
输入包含一个整数n。
输出格式
输出一行,包含一个整数,表示Fn除以10007的余数。
说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。

题解:
这道题的重点在于题目里面给的提示,不要直接推导出Fn的值再去计算余数。最初看到的时候有点搞不懂。后来思考可能是因为当Fn大于10007的时候,存放在Fn数组里面的值太大,导致运算可能会变慢,但是如果在循环过程中,每一次F[i-2]+F[i-2]的都%10007的话,就可以增加运算的速度。

同时这道题的还有要注意的地方就是在最开始的时候定义一个int类型的数组的时候要定义多点,系统测试的数据是比较大的。我是定义了1000000个int变量的数组才过了检测。

猜你喜欢

转载自www.cnblogs.com/Reton/p/12142148.html