资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
输入格式
输入包含一个整数n。
输出格式
输出一行,包含一个整数,表示Fn除以10007的余数。
我目前能想到的两种解法:
方法一:
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int f1 = 1, f2 = 1, t = 1;
for(int i = 3; i <= n; i++){
t = ((f1%10007) + (f2%10007)) % 10007;
f1 = f2;
f2 = t;
}
System.out.println(t);
}
}
方法二: //用了递归的方法,但是由于太深了,导致程序运行超时,故还是推荐第一种方法
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
System.out.println(Fibonacci(n));
}
public static int Fibonacci(int n){
if(n == 0)
return 0;
else if(n == 1)
return 1;
else
return ((Fibonacci(n - 1)%10007 + Fibonacci(n - 2)%10007))%10007;
}
}