题目没给全,吃X了。。。

2875: [Noi2012]随机数生成器

Time Limit: 10 Sec Memory Limit: 512 MB

Submit: 1479 Solved: 829

[Submit][Status][Discuss]

Description

栋栋最近迷上了随机算法,而随机数生成是随机算法的基础。栋栋准备使用线性同余法(Linear Congruential Method)来生成一个随机数列,这种方法需要设置四个非负整数参数m, a, c, X0,按照下面的公式生成出一系列随机数:

Xn+1 = (aXn + c) mod m

mod m 表示前面的数除以m的余数。从这个式子可以看出,这个序列的下一个数总是由上一个数生成的。

用种方法生成的序列具有随机序列的性质,因此这种方法被广泛地使用,包括常用的C++和Pascal 的产生随机数的库函数使用的也是这种方法。

知道这样产生的序列具有良好的随机性,不过心急的他仍然想尽快知道Xn 是多少。由于栋栋需要的随机数是0, 1,…, g − 1 之间的,他需要将Xn除以g。取余得到他想要的数,即Xn mod g,你只需要告诉栋栋他想要的数Xn mod g 是多少就可以了。

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

题目大意:令Xi+1=(a*Xi+c)%m,求Xn%g

题解:

矩乘+快速幂 优化效率

构造矩阵:

矩乘转移即可

要用快速乘!!!不然会爆!!!

code:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
long long m,a,c,x0,n,g;
long long Mat[3][3];
long long z[10010];
long long cnt; long long quick_mul(long long x,long long y)
{
long long t=0;cnt=0;
while (y)
{
z[++cnt]=y;
y>>=1;
}
for (int i=cnt; i; i--)
{
t=(t+t)%m;
if (z[i]&1) t=(t+x)%m;
}
return t;
} void quick_pow(long long zs)
{
if (zs==1)
{
Mat[0][0]=1;Mat[1][0]=c%m;Mat[1][1]=a%m;
return;
}
quick_pow(zs>>1);
long long Ma[3][3]={0};
for (int i=0; i<=1; i++)
for (int j=0; j<=1; j++)
for (int k=0; k<=1; k++)
Ma[i][j]=(Ma[i][j]+quick_mul(Mat[i][k],Mat[k][j]))%m;
if (zs&1)
{
Ma[1][0]=(Ma[1][0]+quick_mul(Ma[1][1],c))%m;
Ma[1][1]=quick_mul(Ma[1][1],a);
}
for (int i=0; i<=1; i++)
for (int j=0; j<=1; j++)
Mat[i][j]=Ma[i][j];
}
int main()
{
scanf("%lld%lld%lld%lld%lld%lld",&m,&a,&c,&x0,&n,&g);
quick_pow(n);
x0=(quick_mul(x0,Mat[1][1])+Mat[1][0])%m%g;
printf("%lld\n",x0);
return 0;
}

BZOJ-2875 随机数生成器 矩阵乘法快速幂+快速乘的更多相关文章

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

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

  2. [vijos1725&bzoj2875]随机数生成器<矩阵乘法&快速幂&快速乘>

    题目链接:https://vijos.org/p/1725 http://www.lydsy.com/JudgeOnline/problem.php?id=2875 这题是前几年的noi的题,时间比较 ...

  3. BZOJ 2875 随机数生成器

    http://www.lydsy.com/JudgeOnline/problem.php?id=2875 题意:给出mod,a,c,g,x0,n,xn=(a*xn-1+c)%mod,求xn%g 求A* ...

  4. [NOI2012]随机数生成器 矩阵乘法

    Code: #include<cstdio> #include<algorithm> #include<iostream> #include<cstring& ...

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

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

  6. 【模拟题(电子科大MaxKU)】解题报告【树形问题】【矩阵乘法】【快速幂】【数论】

    目录: 1:一道简单题[树形问题](Bzoj 1827 奶牛大集会) 2:一道更简单题[矩阵乘法][快速幂] 3:最简单题[技巧] 话说这些题目的名字也是够了.... 题目: 1.一道简单题 时间1s ...

  7. HDU 4549 矩阵快速幂+快速幂+欧拉函数

    M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Sub ...

  8. 取模性质,快速幂,快速乘,gcd和最小公倍数

    一.取模运算 取模(取余)运算法则: 1. (a+b)%p=(a%p+b%p)%p; 2.(a-b)%p=(a%p-b%p)%p; 3.(a*b)%p=(a%p * b%p)%p; 4.(a^b)%p ...

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

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

随机推荐

  1. MyBatis学习总结(一)

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  2. js原生选项卡(包含移动端无缝选项卡)三

    今天分享下移动端原生js的无缝轮播图: 移动端尽量减少使用DOM操作来频繁的浪费移动端设备的性能,所以这个无缝轮播图更多的使用了transition和transform,无缝的思想和昨天分享的PC端的 ...

  3. 关于表格前面checkbox复选框不打勾的问题

    当点击左边的树节点的时候,让右边的表格自动选中相应的行,但是选中的行前面如果有checkbox,可能复选框虽然选中了但是不打上勾,解决方案,将遍历表格数据那段代码用延时器包裹一下.

  4. Android studio导入eclipse项目混淆打包出错

    将proguard-android.txt复制一份重命名成proguard-rules.pro,且在build.gradle添加 release {             minifyEnabled ...

  5. [CareerCup] 3.5 Implement Queue using Two Stacks 使用两个栈来实现队列

    3.5 Implement a MyQueue class which implements a queue using two stacks. LeetCode上的原题,请参见我之前的博客Imple ...

  6. 5332盛照宗 如何获取新技能+c语言学习调查

    如何获取新技能+c语言学习调查 你有什么技能比大多人(超过90%以上)更好? 如果问我有没有什么技能比大多数人,并且是90%的人好,我还真不敢说有,因为世界上有70亿人,要比63亿人做的好才行啊.我也 ...

  7. textfield控制光标开始位置

    //    UIView *paddingView1 = [[UIView alloc] initWithFrame:CGRectMake(0, 64, self.view.frame.size.wi ...

  8. ios——视频 MPMoviePlayerController的使用(支持本地和网络)

    视频 MPMoviePlayerController 在iOS中播放视频可以使用MediaPlayer.framework种的MPMoviePlayerController类来完成,它支持本地 视频和 ...

  9. 基于微信红包插件的原理实现android任何APP自动发送评论(已开源)

    背景 地址:https://github.com/huijimuhe/postman 核心就是android的AccessibilityService,回复功能api需要23以上版本才行. 其实很像在 ...

  10. jsoup抓取借书记录

    package tushuguan; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; ...