题目大意:给你$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]随机数生成器的更多相关文章

  1. 洛谷 P2044 [NOI2012]随机数生成器

    题意简述 读入X[0], m, a, c, n和g $ X[n+1]=(a*X[n]+c)\mod m $ 求X数列的第n项对g取余的值. 题解思路 矩阵加速 设\[ F=\begin{bmatrix ...

  2. P2044 [NOI2012]随机数生成器

    洛咕原题 正常的矩乘题. 但是,计算过程中会爆long long. 所以,我们要用快速(龟速)乘来解决. 快速乘,也就是把快速幂稍作修改.乘法被分成若干个加法,以时间为代价解决精度问题. #inclu ...

  3. 【洛谷P3600】 随机数生成器

    https://www.luogu.org/problem/show?pid=3600#sub (题目链接) 题意 一个$n$个数的序列,里面每个数值域为$[1,X]$.给$q$个区间,每个区间的权值 ...

  4. 洛谷P3306 [SDOI2013]随机数生成器(BSGS)

    传送门 感觉我BSGS都白学了……数学渣渣好像没有一道数学题能自己想出来…… 要求$X_{i+1}=aX_i+b\ (mod \ \ p)$ 左右同时加上$\frac{b}{a-1}$,把它变成等比数 ...

  5. 矩阵(快速幂):COGS 963. [NOI2012] 随机数生成器

    963. [NOI2012] 随机数生成器 ★★   输入文件:randoma.in   输出文件:randoma.out   简单对比 时间限制:1 s   内存限制:128 MB [问题描述] 栋 ...

  6. BZOJ 2875: [Noi2012]随机数生成器( 矩阵快速幂 )

    矩阵快速幂...+快速乘就OK了 ----------------------------------------------------------------------------------- ...

  7. 洛咕 P3306 [SDOI2013]随机数生成器

    洛咕 P3306 [SDOI2013]随机数生成器 大力推式子??? \(X_{i}=\underbrace{a(a(\cdots(a(a}_{i-1个a}X_1+b)))\cdots)\) \(=b ...

  8. Bzoj 2875: [Noi2012]随机数生成器(矩阵乘法)

    2875: [Noi2012]随机数生成器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2052 Solved: 1118 Description ...

  9. [NOI2012]随机数生成器【矩阵快速幂】

    NOI2012 随机数生成器 题目描述 栋栋最近迷上了随机算法,而随机数是生成随机算法的基础.栋栋准备使用线性同余法(Linear Congruential Method)来生成一个随机数列,这种方法 ...

随机推荐

  1. 图片懒加载 jquery.lazyload

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  2. PHP一些常用魔术方法

    魔术方法                          调用方法                                     作用__set                   有两个 ...

  3. IO复用——epoll系列系统调用

    1.内核事件表 epoll是Linux特有的I/O复用函数.epoll把用户关心的文件描述上的事件放在内核里的一个事件表中,并用一个额外的文件描述符来标识该内核事件表.这个额外文件描述符使用函数epo ...

  4. JSON初体验(二):Gson解析

    今天,我们来介绍一下Gson的jar包的用法. JSON解析之Gson 特点:编码简介,谷歌官方推荐 数据之间的转换: 1.将json格式的字符串{}转换成为java对象 API: <T> ...

  5. JQuery中的load()、$.get()和$.post()详解 (转)

    load() 1.载入HTML文档 load()方法是jQuery中最为简单和常用的Ajax方法,能载入远程HTML代码并插入DOM中. 它的结构为: load(url [,data][,callba ...

  6. 初步学习pg_control文件之七

    接前文 初步学习pg_control文件之六  看   pg_control_version 以PostgreSQL9.1.1为了,其HISTORY文件中有如下的内容: Release Release ...

  7. PIC32MZ 通过USB在线升级 -- USB CDC bootloader

    了解bootloader 的实现,请加QQ: 1273623966 (验证填 bootloader):欢迎咨询或定制bootloader:我的博客主页www.cnblogs.com/geekygeek ...

  8. Qt 实现脉搏检测-2,简陋的功能产品

    今天终于可以接上硬件来显示真是的脉搏情况了,上图 主要就是显示脉搏的心跳曲线,和IBI 数据来源是三个,串口,网口和蓝牙,目前只实现了串口,过程应该都是差不多的,监听,读取,解析,等硬件更新后,再次更 ...

  9. Windows系统的高效使用

    1-WIndows10系统的入门使用 2-如何把系统盘的用户文件转移到其他盘 3-Windows装机软件一般有哪些? 4-Windows系统有哪些比较好用的下载器? 5-Windows系统中的播放器 ...

  10. Structure From Motion(SFM,从运动恢复结构)

    Structure From Motion(SFM,从运动恢复结构) 阅读相关文献: Wu et al. Multicore Bundle Adjustment Agarwal et. al. Bun ...