fibonacci数列(二)
时间限制:1000 ms | 内存限制:65535 KB
难度:3
描述
In the Fibonacci integersequence, F0 = 0, F1 =1, and Fn = Fn − 1 + Fn −2 for n ≥ 2. For example, the first ten terms ofthe Fibonacci sequence are:
0, 1, 1, 2, 3, 5,8, 13, 21, 34, …
An alternative formula for the Fibonacci sequence is
.
Given an integer n, your goal is to compute the last4 digits of Fn.
Hint
As a reminder, matrix multiplication is associative, and theproduct of two 2 × 2 matrices is given by
.
Also, note that raising any 2 × 2 matrix to the 0th power givesthe identity matrix:
.
输入
The input test file will contain multiple test cases. Each testcase consists of a single line containing n (where 0 ≤ n ≤ 1,000,000,000). Theend-of-file is denoted by a single line containing the number −1.
输出
For each test case, print the last four digits of Fn. If thelast four digits of Fn are all zeros, print ‘0’; otherwise, omit any leadingzeros (i.e., print Fn mod 10000).
样例输入
0
9
1000000000
-1
样例输出
0
34
6875
import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); final int N=21000; int []f=new int [N]; f[0]=0;f[1]=1; int i; for(i=2;i<N;i++){ f[i]=(f[i-1]+f[i-2])%10000; if(f[i]==0){ f[i+1]=(f[i]+f[i-1])%10000; if(f[i+1]==1)break; } } while(in.hasNext()){ int n=in.nextInt(); if(n==-1)break; n=n%i; System.out.println(f[n]); } } }