ACM: 矩阵快速幂运算 数论题 poj 3…
来源:互联网 发布:提花组织软件 编辑:程序博客网 时间:2024/05/24 06:06
In the Fibonacci integersequence, F0 = 0, F1 = 1, andFn = 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
.
Given an integer n, your goal is to compute the last 4digits of Fn.
Input
The input test file willcontain multiple test cases. Each test case consists of a singleline containing n (where 0 ≤ n ≤ 1,000,000,000). Theend-of-file is denoted by a single line containing the number−1.
Output
For each test case, printthe last four digits of Fn. If the last fourdigits of Fn are all zeros, print ‘0’; otherwise,omit any leading zeros (i.e., print Fn mod10000).
Sample Input
0
9
999999999
1000000000
-1
Sample Output
0
34
626
6875
Hint
As a reminder, matrixmultiplication is associative, and the product of two 2 × 2matrices is given by
.
Also, note that raising any 2 × 2 matrix to the 0th power givesthe identity matrix:
.
解题思路:
代码:
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
struct matrix
{
};
int n;
matrix a;
matrix multiply(matrix A, matrix B,int m)
{
}
matrix matrix_pow(matrix A, int n, int m)
{
}
int main()
{
//