关闭

Fibonacci n<10^10次方它的后四位

1123人阅读 评论(0) 收藏 举报
#include <iostream>
#include <cstdio>

using namespace std;

struct M
{
   int	m[4][4];
};

M mul(M a,M b)
{
   M c;
   c.m[0][0]=(a.m[0][0]*b.m[0][0]+a.m[0][1]*b.m[1][0])%10000;
   c.m[0][1]=(a.m[0][0]*b.m[0][1]+a.m[0][1]*b.m[1][1])%10000;
   c.m[1][0]=(a.m[1][0]*b.m[0][0]+a.m[1][1]*b.m[1][0])%10000;
   c.m[1][1]=(a.m[1][0]*b.m[0][1]+a.m[1][1]*b.m[1][1])%10000;
   return c;
}

M creatone()
{
	M c;
	c.m[0][0]=1;
	c.m[0][1]=1;
	c.m[1][0]=1;
	c.m[1][1]=0;
    return c;
}

M fibonacci(int k)
{
	if(k==1) return creatone();
	if(k%2==0) 
	{
		M en = fibonacci(k/2);
		return mul(en,en);
	}
	else 
	{
		M en = fibonacci(k/2);
		return mul(mul(en,en),creatone());
	}
	return creatone();
}
void init()
{
     int n;
	 while(cin>>n)
	 {
		if(n==-1)break;
		if(n==0){cout<<0<<endl;continue;}
		M one = fibonacci(n);;
		int value = one.m[0][1];
		cout<<value%10000<<endl;
	 }
}
int main()
{
	init();
	return 0;
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:100295次
    • 积分:2620
    • 等级:
    • 排名:第13873名
    • 原创:172篇
    • 转载:3篇
    • 译文:1篇
    • 评论:5条
    最新评论