Fibonacci (POJ - 3070 )(矩阵快速幂)
2017-04-29 14:42
435 查看
In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. For example, the first ten terms of the Fibonacci sequence are:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, …
An alternative formula for the Fibonacci sequence is
.
![](https://img-blog.csdn.net/20170429143736599?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ29sZGZyZXNo/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
Given an integer n, your goal is to compute the last 4 digits of Fn.
Input
The input test file will contain multiple test cases. Each test case consists of a single line containing n (where 0 ≤ n ≤ 1,000,000,000). The end-of-file is denoted by a single line containing the number −1.
Output
For each test case, print the last four digits of Fn. If the last four digits of Fn are all zeros, print ‘0’; otherwise, omit any leading zeros (i.e., print Fn mod 10000).
Sample Input
0
9
999999999
1000000000
-1
Sample Output
0
34
626
6875
Hint
As a reminder, matrix multiplication is associative, and the product of two 2 × 2 matrices is given by
.
Also, note that raising any 2 × 2 matrix to the 0th power gives the identity matrix:
详情见http://blog.csdn.net/coldfresh/article/details/70948818
代码几乎一模一样,没有本质的改动,只是系数矩阵m不同
.
代码:
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 last 4 digits of Fn.
Input
The input test file will contain multiple test cases. Each test case consists of a single line containing n (where 0 ≤ n ≤ 1,000,000,000). The end-of-file is denoted by a single line containing the number −1.
Output
For each test case, print the last four digits of Fn. If the last four digits of Fn are all zeros, print ‘0’; otherwise, omit any leading zeros (i.e., print Fn mod 10000).
Sample Input
0
9
999999999
1000000000
-1
Sample Output
0
34
626
6875
Hint
As a reminder, matrix multiplication is associative, and the product of two 2 × 2 matrices is given by
.
Also, note that raising any 2 × 2 matrix to the 0th power gives the identity matrix:
详情见http://blog.csdn.net/coldfresh/article/details/70948818
代码几乎一模一样,没有本质的改动,只是系数矩阵m不同
.
代码:
import java.util.Scanner; public class Main { public static void main(String[]args) { Scanner sc=new Scanner(System.in); M m=new M(); m.a[0][0]=1; m.a[0][1]=1; m.a[1][0]=1; m.a[1][1]=0; M o=new M(); o.a[0][0]=1; o.a[1][1]=1; for(;;) { int n=sc.nextInt(); if(n==-1) break; M k=o.copy(); M l=m.copy(); while(n>0) { if((n&1)==1) { k=k.muip(l); } l=l.muip(l); n>>=1; } System.out.println(k.a[1][0]); } } } class M { long a[][]=new long[2][2]; M muip(M x) { M m=new M(); for(int i=0;i<2;i++) for(int j=0;j<2;j++) { m.a[i][j]=(a[i][0]*(x.a[0][j]%10000)+a[i][1]*(x.a[1][j]%10000))%10000; } return m; } M copy() { M m=new M(); for(int i=0;i<2;i++) for(int j=0;j<2;j++) { m.a[i][j]=a[i][j]; } return m; } }
相关文章推荐
- poj 3070 Fibonacci(矩阵快速幂)
- poj 3070 Fibonacci(矩阵快速幂)
- Fibonacci (poj 3070 矩阵快速幂)
- POJ 3070 Fibonacci (已有斐波那规律_矩阵快速幂取模)
- Poj 3070 Fibonacci (矩阵快速幂)
- 矩阵快速幂——Fibonacci ( POJ 3070 )
- Poj3070 Fibonacci (矩阵快速幂)
- poj 3070 Fibonacci 【矩阵快速幂 求第N个斐波那契数%1000】
- poj 3070 Fibonacci(矩阵快速幂取模)
- POJ 3070 Fibonacci(矩阵快速幂)
- Fibonacci - POJ 3070 - 矩阵快速幂
- Poj 3070 Fibonacci (矩阵快速幂 )
- poj3070 Fibonacci (矩阵快速幂)
- poj 3070 Fibonacci 矩阵快速幂
- poj 3070 Fibonacci(矩阵快速幂模板题)
- hdu 3070 Fibonacci && poj 1575 Tr A(矩阵快速幂模板题)
- POJ3070——矩阵快速幂——Fibonacci
- poj 3070 Fibonacci (矩阵快速幂)
- poj3070 Fibonacci(矩阵快速幂)
- poj 3070 Fibonacci(矩阵快速幂)