hdu 4565——So Easy!
2013-10-04 21:34
239 查看
#include<iostream> #include<cstdio> #include<cstring> using namespace std; #define LL __int64 LL a,b,n,m; void Mul(LL mat1[2][2],LL mat2[2][2],LL mat[2][2]) { for(int i=0;i<2;i++) for(int j=0;j<2;j++) { LL sum=0; for(int k=0;k<2;k++) sum+=(mat1[i][k]*mat2[k][j])%m; mat[i][j]=sum%m; } } void Pow(LL mat[2][2],LL k) { if(k==1) return ; LL mat1[2][2],mat2[2][2]; memcpy(mat1,mat,sizeof(mat1)); Pow(mat1,k>>1); if(k&1) { Mul(mat1,mat,mat2); Mul(mat2,mat1,mat); } else Mul(mat1,mat1,mat); } int main() { while(cin>>a>>b>>n>>m) { if(n==0) { printf("2\n");continue; } if(n==1) { printf("%I64d\n",2*a%m);continue; } if(n==2) { printf("%I64d\n",(2*a*a%m+2*b)%m);continue; } LL mat[2][2]; mat[0][0]=2*a; mat[0][1]=((b-a*a)%m+m)%m; mat[1][0]=1; mat[1][1]=0; Pow(mat,n); printf("%I64d\n",(mat[1][0]*2*a+mat[1][1]*2)%m); } return 0; }
相关文章推荐
- So Easy! HDU - 4565 矩阵快速幂
- 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!(矩阵快速幂)
- hdu 4565 So Easy!
- hnu13150(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 - 2013年长沙邀请赛 A-so easy