矩阵快速幂...+快速乘就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. mahout贝叶斯算法开发思路(拓展篇)1

    首先说明一点,此篇blog解决的问题是就下面的数据如何应用mahout中的贝叶斯算法?(这个问题是在上篇(...完结篇)blog最后留的问题,如果想直接使用该工具,可以在mahout贝叶斯算法拓展下载 ...

  2. oracle 分组后取每组第一条数据

    ‘数据格式 分组取第一条的效果 sql SELECT * FROM (SELECT ROW_NUMBER() OVER(PARTITION BY x ORDER BY y DESC) rn, test ...

  3. 没有login页面

    "/"应用程序中的服务器错误. 无法找到资源. 说明:HTTP 404.您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用.请检查以下 URL 并确保 ...

  4. sql学习之基础(MySql)

    --#创建一个数据库 create database excise01; --#查看所有数据库 show databases; --#查看刚建的数据库 show create database exc ...

  5. HYSBZ 2818 gcd

    /** 大意: 给定整数N,1<= x,y <= N 求解有多少gcd(x,y) 为素数 n=10^7 思路: 首先考虑到n 如此之大,用的快速求欧拉函数. 先默认 y〉x 分析: gcd ...

  6. Web APIs 基于令牌TOKEN验证的实现

    Web APIs 基于令牌TOKEN验证的实现 概述: ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但 ...

  7. 数据解析之XML和JSON

    1. 解析的基本的概念 解析:从事先规定好的格式中提取数据 解析前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照格式获取数据 iOS开发常见的解析:XML解析.JOSN解析 2. X ...

  8. ThinkPHP - 博客获取列表信息

    得到数据: Array ( [0] => Array ( [id] => 5 [name] => PHP [pid] => 0 [sort] => 1 [blog] =& ...

  9. BZOJ 3407: [Usaco2009 Oct]Bessie's Weight Problem 贝茜的体重问题( dp )

    01背包... ----------------------------------------------------------------------- #include<cstdio&g ...

  10. XCode 6 出现 no identity found: Command /usr/bin/codesign failed with exit code 1 解决方法汇总

    1, 解决办法,进入开发者账号重建一个 Provisioning Profiles(或配套证书) 文件,把证书添加正确就可以了 (应该是最有效的) 2, 将p12文件重新安装下 3, 在 iPhone ...