hdu_1588_矩阵_求和_乘法_快速幂_斐波那契数列求前n项和
来源:互联网 发布:iapp源码大师官网 编辑:程序博客网 时间:2024/05/08 23:13
Sample Input
2 1 4 100
2 0 4 100
Sample Output
21
12
Source
题意 ;给你斐波那契数列 F(x);
给你x= g(i)的函数;
让你求 i从0到n-1所有斐波那契数列的和;
解:
g(i)=ki+b;
由之前的矩阵快速幂知识可知
F(X)=A^x;
A是矩阵 1 1
1 0;
可以提出 A^b 剩下部分就是 等比数列 ,自己提取公因式二分求和就行
#include<iostream>#include<cstdio>#include<cstring>using namespace std;typedef long long ll;const int N=2;struct node{ ll a[N][N]; void init() { memset(a,0,sizeof(a)); for(int i=0;i<N;i++) a[i][i]=1; }};//node A,B,E,ans;node E;int mod;node add(node a,node b){ node ans; int i,j; for(i=0;i<N;i++) { for(j=0;j<N;j++) { ans.a[i][j]=(a.a[i][j]+b.a[i][j])%mod; } } return ans;}node mul(node a,node b){ node ans; int i,j,k; for(i=0;i<N;i++) { for(j=0;j<N;j++) { ans.a[i][j]=0; for(k=0;k<N;k++) { ans.a[i][j]=(ans.a[i][j]%mod+a.a[i][k]%mod*b.a[k][j]%mod); } ans.a[i][j]%=mod; } } return ans;}node solve(node a,int b){ node ans; ans.init(); while(b) { if(b&1) ans=mul(ans,a); a=mul(a,a); b>>=1; } return ans;}node sum(node a,int b){ node ans; if(b==1) return a; if(b&1) { return add(mul(add(E,solve(a,b/2+1)),sum(a,b/2)),solve(a,b/2+1)); } else return mul(add(E,solve(a,b/2)),sum(a,b/2));}int main(){ int k,b,n,m; while(cin>>k>>b>>n>>m) { node A,B,ans; mod=m; A.a[0][0]=A.a[0][1]=A.a[1][0]=1; A.a[1][1]=0; B=solve(A,k); E.init(); ans=mul(solve(A,b),add(E,sum(B,n-1))); cout<<ans.a[0][1]<<endl; } return 0;}
阅读全文
0 0
- hdu_1588_矩阵_求和_乘法_快速幂_斐波那契数列求前n项和
- 斐波那契_矩阵乘法
- 矩阵快速幂基础知识补充_关联斐波那契数列通项公式
- 数据结构_递归算法_斐波那契数列
- 09_斐波那契数列
- 09_斐波那契数列
- 6_斐波那契数列
- Java基础_面向对象_求指定项 的菲(斐)波那契数列 值
- NYOJ_1000又见斐波那契数列_矩阵快速幂+费马小定理
- 蓝桥杯评测_前n项和
- 递归入门_斐波那契数列
- 《Java_斐波那契数列实现方法_改进》
- 九度_题目1387:斐波那契数列
- 05_斐波那契数列(Fibonacci sequence)
- 斐波那契数列_兔子问题
- java经典算法1_斐波那契数列
- 蓝桥杯_算法训练_矩阵乘法
- HDU4549_M斐波那契数列_斐波那契数列&费马小定理
- 《算法竞赛入门经典》枚举排列总结
- 203. Remove Linked List Elements
- Intellij IDEA 从入门到精通(一)
- HDU2364(三维数组表示方向)
- 解密蓝牙mesh系列 | 第一篇
- hdu_1588_矩阵_求和_乘法_快速幂_斐波那契数列求前n项和
- java中null和""的区别
- Hadoop 2.6 集群搭建从零开始之3 Hadoop的安装与配置(伪分布式环境)
- 矩阵快速幂基础知识补充_关联斐波那契数列通项公式
- js 的数组怎么push一个对象
- 链接分析算法PageRank和HITS
- matlab2c使用c++实现matlab函数系列教程-imag函数
- PullToRefresh引入依赖,布局,适配器ListView上拉加载下拉刷新
- POJ 2785 4 Values whose Sum is 0【折半枚举】