[洛谷P2044][NOI2012]随机数生成器
题目大意:给你$m,a,c,X_0,n,g$,求$X_{n+1}=(a\cdot X_n+c) \bmod{m}$,最后输出对$g$取模
题解:矩阵快速幂+龟速乘,这里用了$long\;double$强转
卡点:无
C++ Code:
#include <cstdio>
#include <cmath>
using namespace std;
long long m, a, c, x0, n, g;
long long mul(long long a, long long b) {
long long d = (long long) floor(a * (long double) b / m + 0.5);
long long res = a * b - d * m;
if (res < 0) res += m;
return res;
}
//long long mul(long long a, long long b) {
// long long res = 0;
// while (b) {
// if (b & 1) res = (res + a) % m;
// b >>= 1;
// a = (a + a) % m;
// }
// return res;
//}
struct matrix {
long long s[4];
matrix (long long a, long long b, long long c, long long d) {
s[0] = a; s[1] = b; s[2] = c; s[3] = d;
}
matrix operator * (matrix rhs) {
matrix res(0, 0, 0, 0);
res.s[0] = (mul(s[0], rhs.s[0]) + mul(s[1], rhs.s[2])) % m;
res.s[1] = (mul(s[0], rhs.s[1]) + mul(s[1], rhs.s[3])) % m;
res.s[2] = (mul(s[2], rhs.s[0]) + mul(s[3], rhs.s[2])) % m;
res.s[3] = (mul(s[2], rhs.s[1]) + mul(s[3], rhs.s[3])) % m;
return res;
}
};
int main() {
scanf("%lld%lld%lld%lld%lld%lld", &m, &a, &c, &x0, &n, &g);
matrix base(a, 0, 1, 1), ans(x0, c, 0, 0);
while (n) {
if (n & 1) ans = ans * base;
base = base * base;
n >>= 1;
}
printf("%lld\n", ans.s[0] % g);
return 0;
}
[洛谷P2044][NOI2012]随机数生成器的更多相关文章
- 洛谷 P2044 [NOI2012]随机数生成器
题意简述 读入X[0], m, a, c, n和g $ X[n+1]=(a*X[n]+c)\mod m $ 求X数列的第n项对g取余的值. 题解思路 矩阵加速 设\[ F=\begin{bmatrix ...
- P2044 [NOI2012]随机数生成器
洛咕原题 正常的矩乘题. 但是,计算过程中会爆long long. 所以,我们要用快速(龟速)乘来解决. 快速乘,也就是把快速幂稍作修改.乘法被分成若干个加法,以时间为代价解决精度问题. #inclu ...
- 【洛谷P3600】 随机数生成器
https://www.luogu.org/problem/show?pid=3600#sub (题目链接) 题意 一个$n$个数的序列,里面每个数值域为$[1,X]$.给$q$个区间,每个区间的权值 ...
- 洛谷P3306 [SDOI2013]随机数生成器(BSGS)
传送门 感觉我BSGS都白学了……数学渣渣好像没有一道数学题能自己想出来…… 要求$X_{i+1}=aX_i+b\ (mod \ \ p)$ 左右同时加上$\frac{b}{a-1}$,把它变成等比数 ...
- 矩阵(快速幂):COGS 963. [NOI2012] 随机数生成器
963. [NOI2012] 随机数生成器 ★★ 输入文件:randoma.in 输出文件:randoma.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] 栋 ...
- BZOJ 2875: [Noi2012]随机数生成器( 矩阵快速幂 )
矩阵快速幂...+快速乘就OK了 ----------------------------------------------------------------------------------- ...
- 洛咕 P3306 [SDOI2013]随机数生成器
洛咕 P3306 [SDOI2013]随机数生成器 大力推式子??? \(X_{i}=\underbrace{a(a(\cdots(a(a}_{i-1个a}X_1+b)))\cdots)\) \(=b ...
- Bzoj 2875: [Noi2012]随机数生成器(矩阵乘法)
2875: [Noi2012]随机数生成器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2052 Solved: 1118 Description ...
- [NOI2012]随机数生成器【矩阵快速幂】
NOI2012 随机数生成器 题目描述 栋栋最近迷上了随机算法,而随机数是生成随机算法的基础.栋栋准备使用线性同余法(Linear Congruential Method)来生成一个随机数列,这种方法 ...
随机推荐
- CP-ABE ToolKit 安装笔记
博主论文狗,好久没有来贴博客,最近做实验需要用到属性加密,了解了下CP-ABE,前来记录一下: 网上相关的博文较多,博主看了大部分的,认为下面这两个看完了基本就可以成功安装. 可参见博文: http: ...
- Lavavel5.5源代码 - 并发数控制
app('redis')->connection('default')->funnel('key000') // 每个资源最大锁定10秒自动过期,只有60个资源(并发),在3秒内获取不到锁 ...
- Eclipse报错:An internal error occurred during: "Building workspace". Java heap space),卡死解决办法
在项目工程的根目录下,找到.project,用记事本打开,把两处删除掉: 第一处: <buildCommand> <name>org.eclipse.wst.jsdt.core ...
- [Hbase]hbase命令行基本操作
-进入hbase shell hbase shell - 帮助help help - 查看hbase versionversion - 查看hbase 状态 status - 创建表create 't ...
- PADS9.5的常用菜单栏
1. PAD9.5常用的2个菜单是布线工具和选择过滤工具. 2. 布线工具菜单,如下图,依次是选择,移动,复制,删除,添加元件,布线,新建层次化符号,交换参考编号,交换引脚,添加总线,分割总线,延伸总 ...
- Putty的设置保存
用了好几年都不知道这功能, 以前每次在连接时只能手工更改字符为utf-8,当时在想怎么这么弱呢 后来才知道... 1 字符 Translation下 字体Appearance下 颜色Colours下 ...
- Windows扩展屏开发总结
本文来自网易云社区 作者:梁敏 一.多屏设置 在设置-系统-可以点击显示器1和2,可以进行单独设置: "使之成为我的主显示器"可以设置当前显示器是主屏:主屏的选择会决定整个虚拟屏幕 ...
- OBS源码编译开发
本文来自网易云社区 作者:梁敏 OBS简介 OBS(Open Broadcaster Software)是免费开源的视频录制和直播软件,支持运行在windows,Mac和linux平台.官方链接 ht ...
- 自动化测试元素查找利器firepath介绍
自动化测试查找元素和确定元素xpath路径是否正确在业界有个很好的工具就是firefox 浏览器的 firepath 问题: firefox 最新版本已经不支持firebug和firepath这两个插 ...
- 第二篇 Fiddler配置_浏览器&手机
什么是Fiddler? 网络项目的开发和测试中,Fiddler是强大的抓包工具,它的原理是以web代理服务器的形式进行工作的 ,可以说是非常常用的手头工具了,本文就Fiddler使用和配置进行说明. ...