HDU 4565矩阵快速幂—— So Easy!
来源:互联网 发布:艾瑞咨询数据 编辑:程序博客网 时间:2024/06/05 08:23
题目链接
借鉴别人的一张解题思路
转化成了 (a^n + b^n) %M
#include<iostream>#include<string>#include<vector>#include<algorithm>#include<queue>#include<cstdio>#include<cstring>#include<cmath>#include<map>using namespace std;typedef long long ll;ll MOD ;struct Matrix { ll a[2][2]; Matrix() { memset(a, 0, sizeof(a)); } Matrix operator * (const Matrix y) { Matrix ans; for(int i = 0; i <= 1; i++) for(int j = 0; j <= 1; j++) for(int k = 0; k <= 1; k++) ans.a[i][j] += a[i][k]*y.a[k][j]; for(int i = 0; i <= 1; i++) for(int j = 0; j <= 1; j++) ans.a[i][j] %= MOD; return ans; } void operator = (const Matrix b) { for(int i = 0; i <= 1; i++) for(int j = 0; j <= 1; j++) a[i][j] = b.a[i][j]; }};ll solve(ll a,ll b,ll n) { Matrix ans, trs; ans.a[0][1] = 1; //初始值 ans.a[0][0] = a; ans.a[0][1] = 2; // f(n) = a*f(n-1) + b * f(n-2); trs.a[0][0] = a; trs.a[1][0] = -b; trs.a[0][1] = 1; while(n) { if(n&1) ans = ans*trs; trs = trs*trs; n >>= 1; } return (ans.a[0][1]+ans.a[1][1]+MOD)%MOD;//improtant}int main() { ios_base::sync_with_stdio(false);// freopen("data.txt","r",stdin); ll aa,bb,m,n; while(cin>>aa>>bb>>n>>m) { ll p = 2*aa; ll q = aa*aa-bb; MOD = m; cout<<solve(p,q,n)<<endl; } return 0;}
阅读全文
0 0
- HDU 4565——So Easy!(矩阵快速幂乘法)
- HDU 4565矩阵快速幂—— So Easy!
- HDU 4565 So Easy! (矩阵快速幂)
- hdu 4565 - So Easy!(矩阵快速幂)
- hdu 4565 So Easy! 矩阵快速幂
- HDU 4565 So Easy!(矩阵快速幂)
- HDU 4565 So Easy!(矩阵快速幂)
- HDU 4565So Easy! 矩阵快速幂
- hdu 4565 So Easy!(矩阵快速幂)
- HDU - 4565 So Easy! 矩阵快速幂
- HDU 4565 so easy ! 矩阵快速幂
- POJ——4565So Easy!(矩阵快速幂)
- hdu 4565 So Easy!(构造矩阵快速幂)
- 数学公式+矩阵快速幂 hdu-4565 So Easy!
- hdu 4565 So Easy!(矩阵+快速幂)
- hdu - 4565 - So Easy!(矩阵快速幂)
- HDU 4565 So Easy!(数学+矩阵快速幂)
- hdu 4565 So Easy!(推公式&矩阵快速幂)
- SD卡与fatfs文件系统(4)
- Ubuntu16.04安装mediawiki
- poj 3398 Perfect Service
- Passward
- java:封装的概念和代码
- HDU 4565矩阵快速幂—— So Easy!
- (矩阵快速幂)hdu1575 Tr A
- TensorFlow初入
- mysql的延迟加载
- flask、bottle和web.py的相似
- 用c语言实现链栈 (带头结点)
- SSL证书探寻
- java输入JOptionPane
- 腾讯2017暑期实习生编程题