Nyoj148

来源:互联网 发布:windows 做磁盘条带化 编辑:程序博客网 时间:2024/05/01 15:09

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]); } }}


0 0
原创粉丝点击