【BZOJ2875】[Noi2012]随机数生成器【矩阵快速幂】
2016-05-13 18:06
621 查看
【题目链接】
1A。
/* Telekinetic Forest Guard */
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long LL;
struct _mat {
LL num[2][2];
} trans, E;
inline LL mul(LL a, LL b, LL p) {
return (a * b - (LL)(a / (long double) p * b + 1e-5) * p + p) % p;
}
inline _mat matmul(_mat A, _mat B, LL p) {
_mat C;
for(int i = 0; i < 2; i++) for(int j = 0; j < 2; j++) {
C.num[i][j] = 0;
for(int k = 0; k < 2; k++) (C.num[i][j] += mul(A.num[i][k], B.num[k][j], p)) %= p;
}
return C;
}
inline _mat qpow(_mat X, LL n, LL p) {
_mat s = E;
for(_mat t = X; n; n >>= 1, t = matmul(t, t, p)) if(n & 1) s = matmul(s, t, p);
return s;
}
int main() {
LL m, a, c, x, n, g;
scanf("%lld%lld%lld%lld%lld%lld", &m, &a, &c, &x, &n, &g);
E.num[0][0] = E.num[1][1] = 1;
trans.num[0][0] = a; trans.num[0][1] = 0;
trans.num[1][0] = c; trans.num[1][1] = 1;
trans = qpow(trans, n, m);
x = (mul(x, trans.num[0][0], m) + trans.num[1][0]) % m;
printf("%lld\n", x % g);
return 0;
}
1A。
/* Telekinetic Forest Guard */
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long LL;
struct _mat {
LL num[2][2];
} trans, E;
inline LL mul(LL a, LL b, LL p) {
return (a * b - (LL)(a / (long double) p * b + 1e-5) * p + p) % p;
}
inline _mat matmul(_mat A, _mat B, LL p) {
_mat C;
for(int i = 0; i < 2; i++) for(int j = 0; j < 2; j++) {
C.num[i][j] = 0;
for(int k = 0; k < 2; k++) (C.num[i][j] += mul(A.num[i][k], B.num[k][j], p)) %= p;
}
return C;
}
inline _mat qpow(_mat X, LL n, LL p) {
_mat s = E;
for(_mat t = X; n; n >>= 1, t = matmul(t, t, p)) if(n & 1) s = matmul(s, t, p);
return s;
}
int main() {
LL m, a, c, x, n, g;
scanf("%lld%lld%lld%lld%lld%lld", &m, &a, &c, &x, &n, &g);
E.num[0][0] = E.num[1][1] = 1;
trans.num[0][0] = a; trans.num[0][1] = 0;
trans.num[1][0] = c; trans.num[1][1] = 1;
trans = qpow(trans, n, m);
x = (mul(x, trans.num[0][0], m) + trans.num[1][0]) % m;
printf("%lld\n", x % g);
return 0;
}
相关文章推荐
- UITextField限制输入字数高亮状态下输入框内真实类容与textFiled(解决中文输入问题)
- 列出一些你常见的运行时异常(非检查异常)?
- Redis Cluster 实现细节
- 浙大 PAT Advanced level 1020. Tree Traversals (25)
- 能不能对metronic继续封装一下呢
- springmvc表单验证
- ThreadLocal源码分析
- c++语法——类和对象的学习(1)
- markdown和 html相比有什么区别
- 使用ThreadLocal解决多线程的并发问题
- 跨终端Web之Hybrid App开发对比
- Oracle安装临时客户端使用总结
- error MS8020 Build tools v140 cannot be found解决办法
- SparseArray代替HashMap
- CSS 实现:元素相对于文档水平垂直居中
- HDU 2102 A计划
- spring MVC资源过滤配置
- Android中EditText隐藏/自动弹出输入法的问题
- ListView或者Gallery结合checkBox使用
- 关于VisualStudio性能分析数据中的独占样本数和非独占样本数的意义