HDU 5667 构造矩阵快速幂

题目描述

解析

我们根据递推公式

则可得到Q的指数关系式

求Q构造矩阵

同时有公式

其中φ为欧拉函数,且当p为质数时有

代码

#include <cstdio>

using namespace std;

long long pow_mod(long long a, long long p, long long mod) {
if (p == 0) return 1;
long long ans = pow_mod(a, p / 2, mod);
ans = (ans * ans) % mod;
if (p % 2) ans = (ans * a) % mod;
return ans;
} long long get_p(long long c, long long n, long long mod) {
long long ans[3][3] = {{0, 0, 0}, {1, 0, 0}, {1, 0, 0}};
long long a[3][3] = {{0, 1, 0}, {1, c, 1}, {0, 0, 1}};
long long b[3][3];
while (n) {
if (n & 1) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
b[i][j] = 0;
for (int k = 0; k < 3; k++) {
b[i][j] += a[i][k] * ans[k][j];
b[i][j] %= mod;
}
}
}
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
ans[i][j] = b[i][j];
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
b[i][j] = 0;
for (int k = 0; k < 3; k++) {
b[i][j] += a[i][k] * a[k][j];
b[i][j] %= mod;
}
}
}
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
a[i][j] = b[i][j];
n >>= 1;
}
return ans[1][0];
} int T;
long long n, a, b, c, p;
long long phi; int main() {
scanf("%d", &T);
while (T--) {
scanf("%I64d %I64d %I64d %I64d %I64d", &n, &a, &b, &c, &p);
if (n <= 2) phi = n - 1;
else phi = get_p(c, n - 2, p - 1);
printf("%I64d\n", pow_mod(pow_mod(a, b, p), phi, p));
}
return 0;
}

最新文章

  1. Linux学习笔记(16)shell基础之Bash变量
  2. (转)Javascript匿名函数的写法、传参、递归
  3. 在Android中开源类库使用过程中兼容性等问题的讨论
  4. Python-str函数
  5. Simple Chroma Key 0.1.16 图片抠像(vs2003) 无任何插件
  6. easyfinding(codevs 3280)
  7. Scrum会议1(Beta版本)
  8. HTML——表格table标签,tr或者td
  9. HDU P4578 Transformation
  10. DevExpress XtraGrid RepositoryItemCheckEdit 复选框多选的解决方法
  11. SRM 405(1-250pt, 1-500pt)
  12. Guzzle php resetful webservice farmework
  13. jQuery学习-事件之绑定事件(二)
  14. Windows 8实例教程系列 - 开篇
  15. Django入门实践(一)
  16. Java日期工具类,Java时间工具类,Java时间格式化
  17. C#中float, double的精度问题
  18. 记录CentOS环境下将Solr部署到Tomcat
  19. echarts中地图提示&quot;TypeError:i is undefined&quot;
  20. 安装 xadmin 报错: Command &quot;python setup.py egg_info&quot; failed with error code 1 in C:\Users\Python\AppData\Local\Temp\pip-install-1k1byg0p\xadmin\

热门文章

  1. STM32 I2C 难点---这个不错,留着慢慢研究
  2. HTTP 协议解析
  3. jmeter之图片上传
  4. Vagrant 入门 - 启动 vagrant 及 通过 ssh 登录虚拟机
  5. Vagrant 入门 - 项目设置
  6. Git005--工作区和暂存区
  7. struts框架的一些注意点
  8. RMQ(鸽巢原理或字符串操作)
  9. 洛谷 P1168 中位数(优先队列)
  10. 克隆虚拟机(centos7)