蓝桥杯练习系统之入门训练 BEGIN-4 Fibonacci数列

BEGIN-4 Fibonacci数列

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

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

输入格式
输入包含一个整数n。
输出格式 输出一行,包含一个整数,表示Fn除以10007的余数。

样例输入
10
样例输出
55
样例输入
22
样例输出
7704
数据规模与约定 1 <= n <= 1,000,000。

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

方法一:

import java.util.Scanner;

public class Main {
    
    

	public static void main(String[] args) {
    
    
		
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		long a=1,b=1;
		long sum=2;
		if(n<3) {
    
    
		 System.out.println(1); //注意需为1
		}
		else {
    
    
			for(int i=2;i<n;i++)
			{
    
    
				sum=a+b;
				sum%=10007;//注意先取余,最后取余的话,数太大
				a=b;
				b=sum;
			}
		System.out.println(sum);
		}
		
		}
}

方法二:

import java.util.Scanner;

public class Main {
    
    

	public static void main(String[] args) {
    
    
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		int s=1;          //注意需为1
		for(int i=1,j=1;(n--)-2>0;)
		{
    
    
			s=i+j;
			s%=10007;//注意先取余,最后取余的话,数太大
			i=j;
			j=s;
			
		}
		System.out.println(s);
		
	}

}

方法三:

import java.util.Scanner;

public class Main {

	public static void main(String [] args) {
		Scanner in = new Scanner(System.in);
		int i = in.nextInt();
		int end =1;
		for(int l=1,r=1,n=3;n<=i;n++) {
			end=l+r;
			l=r;
			end%=10007;
			r=end;
		}
		System.out.println(end);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_39273319/article/details/103357136