fibonacci数列(二)(矩阵快速幂)

在这里插入图片描述
这道题目摘选自南洋理工学院acm的第148题。这道题目用矩阵快速幂就可以写出来,不需要打表。我在之前写过有关快速幂的博客,参照那个模板把乘法运算符重载一下就行了,具体实现请看代码。

#include<cstdio>
#include<iostream>
using namespace std;
struct MATRIX
{
	int a,b,c,d;
}prime={1,1,1,0},I={1,0,0,1};
int mod=10000;
MATRIX operator*(MATRIX first,MATRIX second)
{
	MATRIX temp;
	temp.a=(first.a*second.a+first.b*second.c)%mod;
	temp.b=(first.a*second.b+first.b*second.d)%mod;
	temp.c=(first.c*second.a+first.d*second.c)%mod;
	temp.d=(first.c*second.b+first.d*second.d)%mod;
	return temp;
}
MATRIX QM(int n)
{
	MATRIX result=I,remain=prime;
	while(n)
	{
		if(n%2) result=result*remain;
		remain=remain*remain;
		n>>=1;
	}
	return result;
}
int main()
{
	int n;
	while(~scanf("%d",&n)&&n!=-1)
	{
		printf("%d\n",QM(n).b);
	}
	return 0;
 } 

猜你喜欢

转载自blog.csdn.net/qq_40634175/article/details/84309412