http://wutyyzchangde.blog.163.com/blog/static/172226566201132311311374/

#include <cstdio>
typedef struct{
__int64 matrix[2][2];
}Matrix;
__int64 powermod(__int64 x,__int64 n,__int64 p){
__int64 res = 1;
for(;n;n>>=1){
if(n&1)
res=(res*x)%p;
x=(x*x)%p;
}
return res;
}
Matrix multi(Matrix x,Matrix y,__int64 p){
Matrix res;
int i,j,k;
__int64 sum;
for(i=0;i<2;i++)
for(j=0;j<2;j++){
sum=0;
for(k=0;k<2;k++)sum+=(x.matrix[i][k]*y.matrix[k][j])%p;
res.matrix[i][j] = sum%p;
}
return res;
}
Matrix Mat_powermod(Matrix x,__int64 n,__int64 p){
Matrix res;
int i,j;
for(i=0;i<2;i++)
for(j=0;j<2;j++){
if(i==j)
res.matrix[i][j] = 1;
else res.matrix[i][j] = 0;
}
for(;n;n>>=1){
if(n&1)res=multi(res,x,p);
x=multi(x,x,p);
}
return res;
}
int main(){
__int64 p,T,a,b,n;
__int64 keep1,keep2,keep3;
__int64 power,result;
Matrix res;
scanf("%I64d",&T);
while(T--){
scanf("%I64d%I64d%I64d%I64d",&a,&b,&n,&p);
keep1=(powermod(a,(p-1)/2,p)+1)%p;
keep2=(powermod(b,(p-1)/2,p)+1)%p;
if(n==0)power=1;
else{
res.matrix[0][0] = 1;
res.matrix[0][1] = 1;
res.matrix[1][0] = 1;
res.matrix[1][1] = 0;
res=Mat_powermod(res,n-1,p-1);
power=(res.matrix[0][0]+res.matrix[0][1])%(p-1);
}
power+=p-1;
res.matrix[0][0]=(a+b)%p;
res.matrix[0][1]=(2*a*b)%p;
res.matrix[1][0]=2%p;
res.matrix[1][1]=(a+b)%p;
res=Mat_powermod(res,power-1,p);
keep3=(2*(((res.matrix[0][0]*(a+b))%p+(res.matrix[0][1]*2)%p)%p))%p;
result=1;
result=(result*keep1)%p;
result=(result*keep2)%p;
result=(result*keep3)%p;
printf("%I64d\n",result);
}
return 0;
}

HDU 3802 Ipad,IPhone的更多相关文章

  1. Ipad,IPhone(矩阵求递推项+欧拉定理)

    Ipad,IPhone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...

  2. HDU 3802 矩阵快速幂 化简递推式子 加一点点二次剩余知识

    求$G(a,b,n,p) = (a^{\frac {p-1}{2}}+1)(b^{\frac{p-1}{2}}+1)[(\sqrt{a} + \sqrt{b})^{2F_n} + (\sqrt{a} ...

  3. 判断访问浏览器客户端类型(pc,mac,ipad,iphone,android)

    <script type="text/javascript"> //平台.设备和操作系统 var system = { win: false, mac: false, ...

  4. JS判断客户端系统 让ipad iphone 等手持设备自动跳到手机版

    if ((navigator.userAgent.match(/(iPhone|iPod|Android|ios|iPad)/i))) { location.replace("http:// ...

  5. ipad iphone 开发的应用,加一个启动预览图片

    如果你想在你的ipad,iphone应用启动是不显示黑屏幕,而是用一个图片代替的话,你只需要吧一张名为 Default.png 的图片加到项目里就行了. 很简单吧,新手们记得去这样美化下你的应用吗,很 ...

  6. 【HDU3802】【降幂大法+矩阵加速+特征方程】Ipad,IPhone

    Problem Description In ACM_DIY, there is one master called “Lost”. As we know he is a “-2Dai”, which ...

  7. 100% width CSS 在 iPad / iPhone Safari 背景被截断 / 显示不全

    Tips: 调试 iPad 或 iPhone 可在设置中启动调试模式,在 Mac 中的 Safari 浏览器 同样开启开发者模式后,进行联机调试.功能彪悍. 最近在做一个页面时,发现在 iPad 的 ...

  8. 根据浏览器内核判断是web/iOS/android/ipad/iphone 来打开不同的网站或页面

    纯js,直接分享,直接使用: var browser={ versions:function(){ var u = navigator.userAgent, app = navigator.appVe ...

  9. ipad/iphone中的前端调试

    需要在ipad上调试代码, 经过一番搜索(多在google搜到的), 稍微整理下 : ). 1. Settings -> Safari -> Advanced/Developer -> ...

随机推荐

  1. realloc,c语言

    realloc #include <stdlib.h> main() { char* ptr=NULL; char* ptr2=NULL; ptr = malloc(); printf(& ...

  2. DataGridView插入一行数据和用DataTable绑定数据2种方式

    以前不会用DataGridView的时候一直使用DataTable绑定的方式,如下: DataTable table = new DataTable(); //给表添加一列Name,此名字和 tabl ...

  3. 通过web远程访问服务器的ipython

    如果想同过一个Web浏览器的方式远程访问服务器上的ipython notebook sever,可通过下面的步骤实现. 服务器:ubuntu14.04 server 客户端:windows/unix/ ...

  4. 有关extern的用法

    1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同.作为一种欲与C兼容的语言, C++保留了一部分过程式 ...

  5. centos 修改shm

    Linux下,Oracle 11g的自动内存管理不能指定大于这个/dev/shm的总量内存.否则就会出现如下错误 ORA-00845: MEMORY_TARGET not supported on t ...

  6. POJ 1679:The Unique MST(次小生成树&amp;&amp;Kruskal)

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19941   Accepted: 6999 D ...

  7. 某IT校招笔试

    前言 博主明天上午9点还有面试,今天突然看到某大牌IT公司笔试题目,必须做一下了 题目 1.假设把整数关键码K散列到N个槽列表,以下哪些散列函数是好的散列函数 A: h(K)=K/N; B: h(K) ...

  8. LCM Cardinality

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=31675#problem/E 暴力 // File Name: uva10892.cpp ...

  9. 万圣节福利:红孩儿3D引擎开发课程《3ds max导出插件初步》

    ds max文件夹,插件文件夹以及3ds max的可执行程序文件夹: 位的,这里要改成x64,否则启动程序后3ds max会提示"不是有效的win32程序"之类的对话框. 然后要将 ...

  10. 2.一步一步学c#(二):核心c#

    简单的控制台应用程序. 代码(它有把某条消息写到屏幕上的一个类组成) 编译并运行程序得到结果: 在上面的代码示例中,前几行代码与名称空间有关,名称空间是把相关类组合在一起的方式.namespace关键 ...