HDU4565 So Easy!【矩阵快速幂】
来源:互联网 发布:翼龙贷网网络贷款 编辑:程序博客网 时间:2024/05/29 13:17
题意:给出a,b,n,m。求
思路:(a + sqrt(b))^n = Xn + Yn * sqrt(b)
(a+sqrt(b))^(n+1) = (Xn + Yn * sqrt(b)) *(a + sqrt(b)) = aXn+bYn + (Xn+aYn) * sqrt(b)
Xn+1 = aXn+bYn; Yn+1 =(Xn+aYn);
X0 = 1;Y0 = 0
(a + sqrt(b))^n + (a - sqrt(b))^n = 2*Xn
因为a-1 < sqrt(b) < a ,0 < (a - sqrt(b))^n <1
(a + sqrt(b))^n,向上取整 = 2Xn
Sn = 2Xn
#include<stdio.h>#include<iostream>#include<string.h>#include<string>#include<stdlib.h>#include<math.h>#include<vector>#include<list>#include<map>#include<stack>#include<queue>#include<algorithm>#include<numeric>#include<functional>using namespace std;typedef long long ll;const int maxn = 5;int MOD,N,a[maxn];struct data{ll s[maxn][maxn];}res,tp;void init(){memset(res.s,0,sizeof res.s);memset(tp.s,0,sizeof tp.s);for(int i = 1; i <= N; i++)res.s[i][i] = 1;/*for(int i = 1; i <= N; i++){for(int j = 1; j <= N; j++)printf("%d%c",tp.s[i][j],j == N?'\n':' ');}*/}struct data mat(struct data &x,struct data &y){struct data temp;memset(temp.s,0,sizeof temp.s);for(int i = 1; i <= N; i++){for(int j = 1; j <= N; j++){for(int k = 1; k <= N; k++){temp.s[i][j] += x.s[i][k] * y.s[k][j];temp.s[i][j] %= MOD;}}}return temp;}struct data mpow(struct data &a,int b){while(b){if(b&1) res = mat(res,a);b >>= 1;a = mat(a,a); }return res;}int main(void){int n,m,a,b;while(scanf("%d%d%d%d",&a,&b,&n,&m)!=EOF){MOD = m;N = 2;init();tp.s[1][1] = tp.s[2][2] = a;tp.s[1][2] = b;tp.s[2][1] = 1;res = mpow(tp,n);ll ans = 0;ans = 2 * res.s[1][1];ans = ( (ans%MOD)+MOD ) % MOD;printf("%lld\n",ans);}return 0;}
阅读全文
0 0
- hdu4565 So Easy!(矩阵快速幂)
- HDU4565 So Easy!【矩阵快速幂】
- 20130707 hdu4565 So Easy! 数学头脑+矩阵快速幂
- HDU4565 So Easy! 矩阵快速幂外加数学
- HDU4565-So Easy!(共轭运用+矩阵快速幂)
- HDU4565 So Easy!(数学+矩阵快速幂)
- HDU4565-So easy-数学推导化简递推矩阵快速幂
- HDU4565---So Easy!(矩阵快速幂(精度控制))
- hdu4565---So Easy!(矩阵)
- HDU4565 So Easy! (矩阵)
- hdu4565 so easy 矩阵
- hdu4565 So Easy! 广义斐波那契+矩阵快速幂+共轭构造
- So Easy! ——————hdu4565(矩阵快速幂)
- HDU4565 So Easy!【矩阵连乘】【推导】
- hdu4565 矩阵快速幂
- hdu4565(矩阵快速幂)
- HDU4565 So Easy!
- HDU4565 So Easy!
- JavaScript的循环结构
- Uva11925
- Spring源码学习思路
- (十九)四大组件的工作过程-BroadcastReceiver
- 第十章 进程与僵尸进程 (上)
- HDU4565 So Easy!【矩阵快速幂】
- (二十)四大组件的工作过程-ContentProvider
- linux下如何解决socket的error: [Errno 98] Address already in use
- 模块化?组件化?插件化?热更新?热修复?
- js循环结构while
- NYOJ2351---你怎么又插队(技巧:扩大数值)
- 【c++】菱形继承
- 面向对象
- COJ1972-大梵天的恩赐