Fibonacci数列这一族的ACM层出不穷,屡屡坑爹,每次好容易看出是它结果又死在O(n)算法上
下面贴出来的是Fibonacci数列的O(log n)的矩阵算法
# include <iostream>
typedef long long LL;
typedef struct VALUEPAIR
{
LL PreviousVal;
LL PresentVal;
VALUEPAIR(const LL & x1, const LL & x2)
{
PreviousVal = x1;
PresentVal = x2;
}
}ValuePair, VP;
class Matrix
{
public:
Matrix();
Matrix(const Matrix &);
const Matrix operator=(const Matrix &);
~Matrix();
//void selfMutiply();
void operator*=(const Matrix &);
LL getLtV() const;
LL getLdV() const;
LL getRtV() const;
LL getRdV() const;
VP operator*(const VP &);
Matrix operator*(const Matrix &);
friend std::ostream & operator<<(std::ostream &, const Matrix &);
private:
LL ltVal, rtVal, ldVal, rdVal;
};
Matrix calculate(const int &);
void getAns(const int &);
int main(int argc, char const *argv[])
{
int nTime = 0;
while(1)
{
VP vp(0, 1);
std::cout << "Input an integer pls\nnTime : ";
while((std::cin >> nTime).fail())
{