分治法--斐波那契数
(2010-12-11 15:52:19)
标签:
斐波那契非负整数数列程序代码分治法it |
分类: Algorithm |
描述 | |
斐波那契数列是指如下数列: F(0)=0, F(1)=1,
F(n)=F(n-1)+F(n-2).数列的前10个数如下: |
|
关于输入 | |
输入包括多组数据. |
|
关于输出 | |
对于每组数据,你的程序应该输出F(n)对10000取模的结果. |
解题思路:
分析斐波那契数列,我们容易得出这样一个结论:
2 x 2的矩阵{F(n+1), F(n) ; F(n), F(n-1)} = {F(n), F(n-1) ; F(n-1), F(n-2)} *{1, 1 ; 1, 0}
而{F(2), F(1) ; F(1), F(0)} = {1, 1 ; 1, 0},所以可以得出{F(n+1), F(n) ; F(n), F(n-1)} ={1,1; 1,0}的n-1次方。然后我们可以用分治法很容易的十分求解。
C++程序代码如下:
#include <map>
#include <iostream>
#include <vector>
#define LEN sizeof(matrix)
using namespace std;
struct matrix
{
};
matrix e = {1, 1, 1, 0};
long getRemainder(const long &d1,const int
&d2)
{
}
matrix* matrixMultiple(matrix *m, matrix *n)
{
}
matrix* divideCompute(long n)
{
}
int main()
{
}