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

--------------------------------------------------------------------------------------

#include<bits/stdc++.h>
 
using namespace std;
 
typedef long long ll;
 
ll MOD, a, c, x, n, g;
 
ll MUL(ll a, ll b) {
ll ans = 0;
for(; b; b >>= 1) {
if(b & 1) ans += a;
if(ans >= MOD) ans -= MOD;
a <<= 1;
if(a >= MOD) a -= MOD;
}
return ans;
}
 
struct matrix {
ll x[2][2];
matrix() {
memset(x, 0, sizeof x);
}
inline void unit() {
x[0][0] = x[1][1] = 1;
x[0][1] = x[1][0] = 0;
}
matrix operator * (const matrix &o) {
matrix ans;
for(int i = 0; i < 2; i++)
   for(int j = 0; j < 2; j++)
       for(int k = 0; k < 2; k++)
           (ans.x[i][j] += MUL(x[i][k], o.x[k][j])) %= MOD;
return ans;
}
matrix operator = (const matrix &o) {
memcpy(x, o.x, sizeof x);
return *this;
}
matrix operator ^ (ll k) {
matrix ans, p = *this; ans.unit();
for(; k; k >>= 1) {
if(k & 1) ans = ans * p;
p = p * p;
}
return ans;
}
} Q;
 
int main() {
cin >> MOD >> a >> c >> x >> n >> g;
Q.x[0][0] = a; Q.x[0][1] = 0; Q.x[1][0] = c; Q.x[1][1] = 1;
matrix ans = Q ^ n;
cout << (MUL(x, ans.x[0][0]) + ans.x[1][0]) % MOD % g << "\n";
return 0;
}

--------------------------------------------------------------------------------------

2875: [Noi2012]随机数生成器

Time Limit: 10 Sec  Memory Limit: 512 MB
Submit: 1289  Solved: 731
[Submit][Status][Discuss]

Description

Input

包含6个用空格分割的m,a,c,X0,n和g,其中a,c,X0是非负整数,m,n,g是正整数。

Output

输出一个数,即Xn mod g

Sample Input

11 8 7 1 5 3

Sample Output

2

HINT

Source

BZOJ 2875: [Noi2012]随机数生成器( 矩阵快速幂 )的更多相关文章

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

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

  2. [luogu2044][NOI2012] 随机数生成器 [矩阵快速幂]

    题面: 传送门 思路: 看一眼这个公式: $x\left[n+1\right]=\left(a\ast x\left[n\right]+c\right) mod m$ 递推,数据范围$n\leq 10 ...

  3. [日常摸鱼]bzoj2875[NOI2012]随机数生成器-矩阵快速幂

    好裸的矩阵快速幂-然而我一开始居然构造不出矩阵- 平常两个的情况都是拿相邻两项放在矩阵里拿去递推的-然后我就一直构造不出来-其实把矩阵下面弄成1就好了啊orz #include<cstdio&g ...

  4. bzoj2875随机数生成器——矩阵快速幂

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2875 矩阵快速幂,把x和c分开求,最后加上即可: 为防止爆long long,要用快速乘. ...

  5. bzoj 2875: [Noi2012]随机数生成器

    #include<cstdio> #include<iostream> #include<cstring> #define ll long long using n ...

  6. BZOJ 2326 数学作业(分段矩阵快速幂)

    实际上,对于位数相同的连续段,可以用矩阵快速幂求出最后的ans,那么题目中一共只有18个连续段. 分段矩阵快速幂即可. #include<cstdio> #include<iostr ...

  7. BZOJ 1009 [HNOI2008]GT考试(矩阵快速幂优化DP+KMP)

    题意: 求长度为n的不含长为m的指定子串的字符串的个数 1s, n<=1e9, m<=50 思路: 长见识了.. 设那个指定子串为s f[i][j]表示长度为i的字符串(其中后j个字符与s ...

  8. 【BZOJ】2875: [Noi2012]随机数生成器(矩阵乘法+快速乘)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2875 矩阵的话很容易看出来.....我就不写了.太水了. 然后乘法longlong会溢出...那么我 ...

  9. 2875: [Noi2012]随机数生成器 - BZOJ

    DescriptionInput 包含6个用空格分割的m,a,c,X0,n和g,其中a,c,X0是非负整数,m,n,g是正整数. Output 输出一个数,即Xn mod gSample Input ...

随机推荐

  1. Android JNI开发提高篇

    有关JNI的开发技术,我们继续围绕Android平台进行,JNI可以支持C或C++,从目前为止我们写过的JNI代码均为C实现的,即文件名为.C而C++的和这些有什么不同呢? Android平台上的JN ...

  2. Qt编写文件一键命名软件

    之所以会写这篇博文,主要是由于近期从网上下载了一堆图片,但图片名称非常没有规律,处理起来非常不方便,由此想到是不是有一键命名的软件能够帮助我对全部图片命名,是图片名称有规律,这样在处理时方便操作. 有 ...

  3. BZOJ3231(矩阵连乘,稍有点复杂)

    题目:3231: [Sdoi2008]递归数列 题意: 一个由自然数组成的数列按下式定义:   对于i <= k:ai = bi 对于i > k: ai = c1ai-1 + c2ai-2 ...

  4. nodejs partials 分布视图

    在学习<node.js开发指南>nodejs partials view时,怎么都不能运行成功.经过艰苦探索,终于成功了,分享一下. Cause: nodejs 的express 版本之间 ...

  5. Tableau 群集部署

    由于公司连续两个月月底Tableau服务器过载崩溃,因此有了搭建Tableau服务器群集的想法.目前还在测试阶段,所以做一步写一步了. 目录: 一.安装和配置工作服务器 二.其他参考文档 一. 安装和 ...

  6. [译]Stairway to Integration Services Level 10 - 高级事件活动

    介绍 在前一篇文章中我们介绍了故障容差相关的 MaximumErrorCount 和 ForceExecutionResult 属性.  同时我们学习了SSIS Control Flow task e ...

  7. mysql时间与字符串相互转换

    时间.字符串.时间戳之间的互相转换很常用,但是几乎每次使用时候都喜欢去搜索一下用法:本文整理一下三者之间的 转换(即:date转字符串.date转时间戳.字符串转date.字符串转时间戳.时间戳转da ...

  8. subplot的几个详细说明

    http://blog.sciencenet.cn/blog-251664-800766.html

  9. [LeetCode]题解(python):062-Unique Paths

    题目来源: https://leetcode.com/problems/unique-paths/ 题意分析: 给定两个整型m,n.判断从一个m×n的矩阵里面,从(0,0)走到(m-1,n-1)一共有 ...

  10. DataTable Select查询

    如果是Excel中数据,空数据为DBNull.Value 查询:dt.Select("name is null") 查询长度:dt.Select("len(convert ...