会员
周边
众包
新闻
博问
闪存
赞助商
所有博客
当前博客
我的博客
我的园子
账号设置
简洁模式
...
退出登录
注册
登录
windmissing
博客园
首页
新随笔
管理
HDU2855 Fibonacci Check-up 矩阵的应用
/* 两个数论公式: f(k) = ( (1+sqrt(5)) / 2 ) ^ k - ( (1-sqrt(5)) / 2) ^ k (1+a)^n = Sum(C(k|n) * (a^k)) 推导过程: Sum(C(k|n) * f(k)) = Sum(C(k|n) * ( (1+sqrt(5)) / 2 ) ^ k - ( (1-sqrt(5)) / 2) ^ k) = Sum(C(k|n) * (1+sqrt(5)) / 2 ) ^ k) - Sum(C(k|n) * (1-sqrt(5)) / 2 ) ^ k) = ( (3+sqrt(5)) / 2 ) ^ k - ( (3-sqrt(5)) / 2) ^ k = ( (1+sqrt(5)) / 2 ) ^ 2k - ( (1-sqrt(5)) / 2) ^ 2k = f(2k) 构造矩阵是浮云 Fn(1,2) = |f(n) f(n-1)| F1(1,2) = |f(1) f(1)| = |1 0| A(2,2) = |1 1| |1 0| */ #include "Mat.h" #include <iostream> using namespace std; int main() { Mat A(2,2),F(1,2); int t, n; scanf("%d", &t); while(t--) { scanf("%d%d", &n, &mod); if(n == 0) { printf("0\n"); continue; } A.clear(2);A.s[1][1] = 0; F.clear(1); A.Er_work(n*2-1); F.Multiply(A); printf("%d\n", F.s[0][0]); } return 0; }
posted @
2011-12-30 11:06
windmissing
阅读(
99
) 评论(
0
)
编辑
收藏
举报
刷新页面
返回顶部