矩阵快速幂,欧拉定理。

$g(n)$递推式:$g(n)=5g(n-1)+5g(n-2)-g(n-3)$,可以构造矩阵快速求递$n$项,指数很大,可以利用欧拉定理降幂。

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<iostream>
using namespace std;
typedef long long LL;
const double pi=acos(-1.0),eps=1e-;
void File()
{
freopen("D:\\in.txt","r",stdin);
freopen("D:\\out.txt","w",stdout);
}
template <class T>
inline void read(T &x)
{
char c=getchar(); x=;
while(!isdigit(c)) c=getchar();
while(isdigit(c)) {x=x*+c-''; c=getchar();}
} LL MOD; struct Matrix
{
long long A[][];
int R, C;
Matrix operator*(Matrix b);
}; Matrix X, Y, Z; Matrix Matrix::operator*(Matrix b)
{
Matrix c;
memset(c.A, , sizeof(c.A));
int i, j, k;
for (i = ; i <= R; i++)
for (j = ; j <= b.C; j++)
for (k = ; k <= C; k++)
c.A[i][j] = (c.A[i][j] + (A[i][k] * b.A[k][j]) % MOD) % MOD;
c.R = R; c.C = b.C;
return c;
} void init()
{
memset(X.A, , sizeof X.A);
memset(Y.A, , sizeof Y.A);
memset(Z.A, , sizeof Z.A); Y.R = ; Y.C = ;
for (int i = ; i <= ; i++) Y.A[i][i] = ; X.R = ; X.C = ;
X.A[][]=-;
X.A[][]=; X.A[][]=;
X.A[][]=; X.A[][]=; Z.R = ; Z.C = ;
Z.A[][]=; Z.A[][]=; Z.A[][]=;
} LL work(LL tt)
{
if(tt==) return ;
if(tt==) return ;
if(tt==) return ; tt=tt-; init();
while (tt)
{
if (tt % == ) Y = Y*X;
tt = tt >> ;
X = X*X;
}
Z = Z*Y;
return Z.A[][];
} int T;
LL n,x,y,s; LL phi(LL x)
{
LL res=x,a=x;
for(int i=;i*i<=a;i++)
{
if(a%i==)
{
res=res/i*(i-);
while(a%i==) a/=i;
}
}
if(a>) res=res/a*(a-);
return res;
} LL pow(LL a,LL b,LL mod)
{
LL c=;
while(b!=)
{
if(b%==) c=(c*a)%mod,b--;
else a=(a*a)%mod,b=b/;
}
return c;
} int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%lld%lld%lld%lld",&n,&y,&x,&s);
MOD=phi(s+);
LL gn=work(n*y)+MOD;
LL ans=pow(x,gn,s+);
printf("%lld\n",ans);
}
return ;
}

最新文章

  1. WebDriver API元素的定位
  2. 委托、回调 Lambda表达式书写方式
  3. 解析html并使用canvas进行渲染
  4. 创建空列表遇到的问题-RF
  5. python基础(三元运算+深浅拷贝+函数参数)
  6. prototype与原型链
  7. 使用log4j的时候如何输出printStackTrace()的堆栈信息
  8. Linux 下安装服务器安全狗
  9. PowerDesigner修改设计图中文字的字体大小等样式
  10. 移动对meta的定义
  11. java中log4j学习笔记
  12. 解决无法make uImage的问题
  13. java.io.IOException: Attempted read from closed stream
  14. 数据结构Java实现01----线性表与顺序表
  15. Windows 1.0 to Windows 10
  16. 记一次GRPC使用报错排查
  17. d3实现的力向导图
  18. A pointer is a variable whose value is the address of another variable 指针 null pointer 空指针 内存地址0 空指针检验
  19. OWA (Office Web Access)
  20. shonc-聊天im工具配置

热门文章

  1. asp.net 的一个简单进度条功能
  2. Orchard中的Host和Tenant
  3. [转]Disabling ASLR on individual iOS applications when using iOS 6.0.1
  4. 迟到的 WPF 学习 &mdash;&mdash; 控件
  5. cegui-0.8.2编译过程详解
  6. socket网络编程快速上手(二)——细节问题(1)
  7. Make Things Move -- Javascript html5版(一)文件目录结构和工具方法准备
  8. RTB撕开黑盒子 Part 4: Shady Bidding
  9. AS3中释放优化的几条常识
  10. CSUOJ 1299 - Number Transformation II 打表预处理水DP