题意简述

读入X[0], m, a, c, n和g

$ X[n+1]=(a*X[n]+c)\mod m $

求X数列的第n项对g取余的值。

题解思路

矩阵加速

设$$ F=\begin{bmatrix} a&0\1&1\end{bmatrix}, G=\begin{bmatrix} X[0]\c\end{bmatrix}$$

则$$ \begin{bmatrix} X[n]\c\end{bmatrix} = G * F ^ n (n > 0)$$

乘法用快速乘

代码

  1. #include <cstdio>
  2. typedef long long ll;
  3. int T, N, g;
  4. ll n, m, aa, cc, x0, mod;
  5. struct Matrix
  6. {
  7. ll a[4][4];
  8. Matrix& operator =(const Matrix& x)
  9. {
  10. for (register int i = 1; i <= N; ++i)
  11. for (register int j = 1; j <= N; ++j)
  12. a[i][j] = x.a[i][j];
  13. return *this;
  14. }
  15. };
  16. Matrix a, b, c;
  17. ll _mul(ll x, ll y, ll s = 0)
  18. {
  19. for (; y; y >>= 1, x = (x + x) % mod)
  20. if (y & 1)
  21. s = (s + x) % mod;
  22. return s;
  23. }
  24. Matrix Mul(const Matrix& x, const Matrix& y)
  25. {
  26. Matrix s;
  27. for (register int i = 1; i <= N; ++i)
  28. for (register int j = 1; j <= N; ++j)
  29. s.a[i][j] = 0;
  30. for (register int i = 1; i <= N; ++i)
  31. for (register int j = 1; j <= N; ++j)
  32. for (register int k = 1; k <= N; ++k)
  33. s.a[i][j] = (s.a[i][j] + _mul(x.a[i][k], y.a[k][j])) % mod;
  34. return s;
  35. }
  36. Matrix _pow(Matrix x, ll y)
  37. {
  38. Matrix s;
  39. for (register int i = 1; i <= N; ++i)
  40. for (register int j = 1; j <= N; ++j)
  41. s.a[i][j] = (i == j);
  42. for (; y; y >>= 1, x = Mul(x, x)) if (y & 1) s = Mul(s, x);
  43. return s;
  44. }
  45. int main()
  46. {
  47. N = 2;
  48. scanf("%lld%lld%lld%lld%lld%d", &m, &aa, &cc, &x0, &n, &g);
  49. mod = m;
  50. c.a[1][1] = x0; c.a[1][2] = cc;
  51. a.a[1][1] = aa; a.a[2][1] = a.a[2][2] = 1;
  52. if (n <= 0) {printf("%lld\n", x0); return 0; }
  53. b = Mul(c, _pow(a, n));
  54. printf("%lld\n", (b.a[1][1] + mod) % mod % g);
  55. }

洛谷 P2044 [NOI2012]随机数生成器的更多相关文章

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

    题目大意:给你$m,a,c,X_0,n,g$,求$X_{n+1}=(a\cdot X_n+c) \bmod{m}$,最后输出对$g$取模 题解:矩阵快速幂+龟速乘,这里用了$long\;double$ ...

  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. 用JavaScript做一個簡單的計算器

    今天繼續學習JavaScript,視頻講的確實挺差勁的.還是只能跟著W3School自己慢慢摸索著弄了.自己百度了一下,參考了一個大佬寫的一個簡單的計算器代碼.代碼能跑通,但是做出來的樣子實在是感覺太 ...

  2. android_sdcard读写(三)

    这次来个稍微复杂点的. package cn.com.sxp;import android.app.Activity;import android.app.ProgressDialog;import ...

  3. Stixel_World(single)学习笔记

      1. 算法背景 Q: 如何有效处理数以百万的视差图数据(提供了每个像素的精确深度信息)? 以及如何在大量数据中找到所有相关的障碍物? 提出方法 “ stixel_world ”, It takes ...

  4. Java监控任务的生命周期

    Observable: public interface Observable { enum Cycle{ STARTED, RUNNING, DONE, ERROR } Cycle getCycle ...

  5. Unable to start services through AMBARI UI

    ambari开启nodemanager卡住,后台日志: Mar ::, WARN [ambari-action-scheduler] ActionScheduler: - Exception rece ...

  6. 抓包自定义过滤器需加%XXXX%,如%third_play%

    抓包自定义过滤器需加%XXXX%,如%third_play%

  7. TestNG的静态方法mock的步骤

    最近团队内部对程序中使用大量的`静态方法`,而公司要求要有sonar扫描覆盖率的,因为在大量使用静态方法的地方若不mock,则覆盖率达不到.于是网上很少的文章讲解对静态方法的mock,大多都是如何使用 ...

  8. findBugs英文代号的对照表

    findBugs错误英文翻译rule.findbugs.IMSE_DONT_CATCH_IMSE.name=不良实践 - 捕获可疑IllegalMonitorStateException rule.f ...

  9. 个人永久性免费-Excel催化剂功能第81波-指定单元格区域内容及公式填充

    在日常数据处理过程中,需要对缺失数据进行填充时,按一定逻辑规则进行处理,实现快速填充,规范数据源.此篇给大家带来多种填充数据的场景. 业务使用场景 对各种系统中导出的数据,很多时候存在数据缺失的情况, ...

  10. e校帮V1.1使用指南

    2017年04月17日,e校帮正式版本V1.1.4正式上线了.大家可以在e校帮官网进行下载,http://exiaobang.top 或者在搜狗手机助手/搜狗输入法/酷安进行下载. e校帮简介: e校 ...