前两块可以看成是不是二次剩余,快速幂计算即可。

后半部分可以看成x1=a+b+2ab,x2=a+b-2ab为特征方程x^2-px-qx=0的两根

然后可以通过韦达定理求出p和q,因此递推式为A(n+2)=pA(n+1)+qA(n)

还要用费马小定理化简一下斐波那契数。

矩阵快速幂即可求。

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll mod;
struct Max
{
ll a[][];int n,m;
Max(){n=m=;memset(a,,sizeof(a));};
Max operator *(const Max &b)const{
Max c;c.n=n;c.m=b.m;
for(int k=;k<m;++k)
for(int i=;i<n;++i)
for(int j=;j<b.m;++j)
c.a[i][j]=(c.a[i][j]+a[i][k]*b.a[k][j]%mod)%mod;
return c;
}
};
ll qmod(ll n,ll m,ll p)
{
ll ans=;
while(m)
{
if(m&)ans=ans*n%p;
n=n*n%p;m>>=;
}
return ans;
}
Max Qmod(Max a,ll b)
{
Max ans;ans.n=a.n;ans.m=a.m;
ans.a[][]=ans.a[][]=;
while(b)
{
if(b&)ans=ans*a;
a=a*a;b>>=;
}
return ans;
}
ll calc(ll a,ll b,ll n,ll p)
{
mod=p-;
Max f;f.n=f.m=;
f.a[][]=;f.a[][]=;
f.a[][]=;f.a[][]=;
f=Qmod(f,n);
mod=p;
int k=f.a[][];
Max z;z.n=z.m=;
z.a[][]=*(a+b)%mod;z.a[][]=-(a-b)*(a-b)%mod;
z.a[][]=;z.a[][]=;
z=Qmod(z,k-);
Max ans;ans.n=,ans.m=;
ans.a[][]=,ans.a[][]=*(a+b)%mod;
ans=ans*z;
return (ans.a[][]+mod)%mod;
}
int main()
{
int T;ll a,b,n,p;
scanf("%d",&T);
while(T--)
{
scanf("%lld%lld%lld%lld",&a,&b,&n,&p);
int tmp1=qmod(a,(p-)/,p);
int tmp2=qmod(b,(p-)/,p);
if(tmp1==-||tmp2==-)
{
puts("");continue;
}tmp1++;tmp2++;
printf("%lld\n",tmp1%p*tmp2%p*calc(a,b,n,p)%p);
}
return ;
}

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

  1. HDU 3802 Ipad,IPhone

    http://wutyyzchangde.blog.163.com/blog/static/172226566201132311311374/ #include <cstdio> type ...

  2. HDU 5007 Post Robot KMP (ICPC西安赛区网络预选赛 1001)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5007 解题报告:输入一篇文章,从头开始,当遇到 “Apple”, “iPhone”, “iPod”, ...

  3. 数据结构(主席树):HDU 4729 An Easy Problem for Elfness

    An Easy Problem for Elfness Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 65535/65535 K (J ...

  4. HDU题解索引

    HDU 1000 A + B Problem  I/O HDU 1001 Sum Problem  数学 HDU 1002 A + B Problem II  高精度加法 HDU 1003 Maxsu ...

  5. hdu 5007 水 弦

    http://acm.hdu.edu.cn/showproblem.php?pid=5007 纯粹的联系String的substr 什么时候substr拦截比写短话 string te; int n; ...

  6. hdu 5007

    http://acm.hdu.edu.cn/showproblem.php?pid=5007 字符串处理 暴力 #include <cstdio> #include <cstdlib ...

  7. iPhone Anywehre虚拟定位提示“后台服务未启动,请重新安装应用后使用”的解决方法

    问题描述: iPhone越狱了,之后在Cydia中安装Anywhere虚拟定位,但是打开app提示:后台服务未启动,请重新安装应用后使用. 程序无法正常使用... 解决方法: 打开Cydia-已安装, ...

  8. input标签中button在iPhone中圆角的问题

    1.问题 使用H5编写微信页面时,使用<input type="button"/>时,在Android手机中显示正常,但是在iPhone手机中则显示不正常,显示为圆角样 ...

  9. iOS获取iPhone系统等信息和服务器返回空的异常处理

    前言: 在项目中经常会遇到需要获取系统的信息来处理一些特殊的需求和服务端返回为空的处理,写在这里只是笔记一下. 获取设备的信息 NSLog(@"globallyUniqueString=%@ ...

随机推荐

  1. Logistic Regression – Geometric Intuition

    Logistic Regression – Geometric Intuition Everybody who has taken a machine learning course probably ...

  2. elementUI 表格分页后台排序记录

    表格代码 <div class="m-table"> <el-table :data="logs" style="width: 10 ...

  3. JMS学习(二)之ActiveMQ

    1,ActiveMQ是Apache实现的基于JMS的一个消息服务器.下面记录ActiveMQ的一些基本知识. 2,ActiveMQ connectors:ActiveMQ providesconnec ...

  4. 网页中创建音频、视频和Flash等多媒体:object元素

    <object>元素:它主要用于定义网页中的多媒体,比如音频.视频.Java applets.PDF.ActiveX和Flash.Object标签是成对出现的,在object标签内可以使用 ...

  5. 20155218 2006-2007-2 《Java程序设计》第5周学习总结

    20155218 2006-2007-2 <Java程序设计>第5周学习总结 教材学习内容总结 java中的错误都会被包装成对象,且是可抛出的. 通常称错误处理为异常处理,程序设计本身的错 ...

  6. 以python代码解释fork系统调用

    import os print('Process (%s) start...' % os.getpid()) # Only works on Unix/Linux/Mac: pid = os.fork ...

  7. mysql学习------二进制日志管理

    MySQL二进制日志(Binary Log)   a.它包含的内容及作用如下:    包含了所有更新了数据或者已经潜在更新了数据(比如没有匹配任何行的一个DELETE)    包含关于每个更新数据库( ...

  8. 公共语言运行库(CLR)开发系列课程(1):Pinvoke 简介 学习笔记

    前言 让拖管代码对象和非托管对象协同工作的过程称为互用性(Interoperability),通常简称为 Interop. P/Invoke在托管代码与非托管代码交互式时产生一个事务(Transiti ...

  9. React-Native 之 生命周期

    前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所 ...

  10. wpf DataTemplate ColumnDefinition width equal

    <Grid.ColumnDefinitions> <ColumnDefinition SharedSizeGroup="col1" /> <Colum ...