入门训练 Fibonacci数列(Java)

题目链接:http://lx.lanqiao.cn/problem.page?gpid=T4

问题描述

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。

本题的一大关键点在于题目中提示信息,不需要先求出原数再求余。所以有了

F[i]=(F[i-1]+F[i-2])%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;
		int f2 = 1;
		int Fn = 0;
		if(n<=2) {
			Fn = 1;
		}
		else {
			for(int i=0;i<n-2;i++) {
				int temp = f2;
				f2 = (f1 + f2)%10007;
				f1 = temp;
			}
			Fn = f2;
		}
		System.out.println(Fn);
		
		
		sc.close();
	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章