您的位置:首页 > 其它

斐波那契数列的第N项

2014-11-06 21:02 471 查看
斐波那契数列的定义如下:

F(0) = 0
F(1) = 1
F(n) = F(n - 1) + F(n - 2) (n >= 2)

(1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, ...)
给出n,求F(n),由于结果很大,输出F(n) % 1000000009的结果即可。

Input
输入1个数n(1 <= n <= 10^18)。


Output
输出F(n) % 1000000009的结果。


Input 示例
11


Output 示例
89

#include <stdio.h>
#define MOD 1000000009;
struct RECT{
long long  x11,x12,x21,x22;
};
RECT sum,data;

RECT mult(RECT tem){
RECT result;
result.x11=(tem.x11*data.x11+tem.x12*data.x21)%MOD;
result.x12=(tem.x11*data.x12+tem.x12*data.x22)%MOD;
result.x21=(tem.x21*data.x11+tem.x22*data.x21)%MOD;
result.x22=(tem.x21*data.x12+tem.x22*data.x22)%MOD;
return result;

}

long long quick_Mult(long long n){

{
sum.x11=1;
sum.x12=0;
sum.x21=0;
sum.x22=0;
}
{
data.x11=1;
data.x12=1;
data.x21=1;
data.x22=0;

}

while(n){
if(n%2)
sum=mult(sum);
n=n/2;
data=mult(data);
}
return sum.x11;
}

int main(){
long long n;
scanf("%I64d",&n);
printf("%I64d\n",quick_Mult(n-1));

}


[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: