问题描述:
Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
输入格式:
输入包含一个整数n。
输出格式:
输出一行,包含一个整数,表示Fn除以10007的余数。
说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。
样例输入:
10
样例输出:
55
样例输入:
22
样例输出:
7704
数据规模与约定:
1 <= n <= 1,000,000。
需要注意的是,不能先计算出结果再进行求余,必须按照要求来。直接进行求余。
实现代码:
import java.util.Scanner;//导入输入数值的包
class Main{//这个命名很重要,java在蓝桥杯的测评系统里,类名只能为Main,并且public只能有一个
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input=new Scanner(System.in);
int shuru=input.nextInt();//输入一个数
int [] arrays= new int [shuru];//声明相应的数组长度
int jieguo=0;//设置一个变量用于接收和返回最终结果
for(int i=2;i<shuru;i++) {
arrays[0]=1;//F1=F2=1
arrays[1]=1;
arrays[i]=(arrays[i-1]%10007+arrays[i-2]%10007)%10007;//两个数相加后求余得到的结果与两个数分别求余后得到的结果是一样的
jieguo=arrays[i];
}
if(shuru==1 || shuru==2) {
jieguo=1;//如果输入为1或2直接将结果赋1
}
System.out.println(jieguo);
}
}