[SDOI2013] 随机数生成器

随机数生成-python实现 随机数生成时Monte Carlo模拟的中心任务。前面的章节介绍了如何使用Python和例如numpy.random等库莱生成不同分布的随机数的方法。对于我们现在的项目,最重要的是标准正态分布的随机数。这样我们应当有一个专门用来生成这种随机数的方便的函数。 这个函数中使用了方差减少技术,也就是antithetic paths和moment matching,这些在前面章节中有所介绍。 应用这个函数是很直接的。这个函数是我们后续分析的重要驱动力量。 import numpy as np def sn. 阅读详情

传送门

这道题就是推大式子啊
我们发现最后的 X n X_n Xn​的 n n n可能会特别大
所以我们要尝试简化
那么我们联想到等比数列
注:为了表达简便,下文所有式子都是在   m o d   p \bmod p modp意义下的
设
( X i + 1 + c ) = a ( X i + c ) (X_{i+1}+c)= a(X_i+c) (Xi+1​+c)=a(Xi​+c)
X i + 1 + c = a X i + a c X_{i+1}+c=aX_i+ac Xi+1​+c=aXi​+ac
X i + 1 = a X i + ( a − 1 ) ⋅ c X_{i+1}=aX_i+(a-1)\cdot c Xi+1​=aXi​+(a−1)⋅c
∵ X i + 1 = a X i + b \because X_{i+1}=aX_i+b ∵Xi+1​=aXi​+b
∴ b = ( a − 1 ) ⋅ c \therefore b=(a-1)\cdot c ∴b=(a−1)⋅c
c = b a − 1 c=\frac{b}{a-1} c=a−1b​
那么
X n + c = a n − 1 ( X 1 + c ) X_n+c=a^{n-1}(X_1+c) Xn​+c=an−1(X1​+c)
a n − 1 = t + c X 1 + c a^{n-1}=\frac{t+c}{X_1+c} an−1=X1​+ct+c​
那么我们只需要找到 n − 1 n-1 n−1的最小值就可以了
相当于是找关于 y y y的方程 x y = z x^y=z xy=z的最小整数解
解决这个可以用BSGS算法来解决

但是注意一个细节
就是当 a ≤ 1 a\leq 1 a≤1的时候是不能这么算的,因为我们发现
当 a = 0 a=0 a=0时, c c c是一个负数
当 a = 1 a=1 a=1时, c c c没有意义
所以特判一下就好了
还要特判当 X 1 = t X_1=t X1​=t的时候(其实这个好像无所谓总之特判一下就好了)
如果想写的快一点就手写哈希或者用unordered_map水一下,比map少一个log

# include <bits/stdc++.h>
# include <unordered_map>
using namespace std;

# define Rep(i,a,b) for(int i=a;i<=b;i++)
# define _Rep(i,a,b) for(int i=a;i>=b;i--)
# define RepG(i,u) for(int i=head[u];~i;i=e[i].next)
# define debug puts("QAQ");

typedef long long ll;

const int N=1e5+5;

template <typename T> void read(T &x){
	x=0;int f=1;
	char c=getchar();
	for(;!isdigit(c);c=getchar())if(c=='-')f=-1;
	for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+c-'0';
	x*=f;
}

ll T,mod,a,b,c,x1,t;

unordered_map<ll,ll> var;

ll Qpow(ll base,ll ind){
	ll res=1;
	while(ind){
		if(ind&1)res=res*base%mod;
		base=base*base%mod;
		ind>>=1;
	}
	return res;
}

ll BSGS(ll x,ll z){
	var.clear();
	ll m=ceil(sqrt(mod));
	for(ll i=0,j=z;i<=m;i++,j=j*x%mod)var[j]=i;
	for(ll i=1,j=Qpow(x,m),k=j;i<=m;i++,j=j*k%mod)if(var.count(j))return i*m-var[j];
	return -2;
}

int main()
{
	read(T);
	while(T--){
		read(mod),read(a),read(b),read(x1),read(t);
		if(t==x1){puts("1");continue;}
		if(a==1){
			if(b)printf("%lld\n",(t-x1+mod)%mod*Qpow(b,mod-2)%mod+1);
			else puts("-1");
			continue;	
		}
		if(!a){
			if(b==t)puts("2");
			else puts("-1");
			continue;	
		}
		c=b*Qpow(a-1,mod-2);
		ll ans=BSGS(a,(t+c)%mod*Qpow((x1+c)%mod,mod-2)%mod);
		printf("%lld\n",ans+1);
	}
	return 0;
}
随机数产生原理及实现.docx 包含六种随机数产生方案及相关matlab代码的实现,均匀分布,泊松分布,几何分布,二项分布,指数分布,正态分布 立即下载

相关推荐

企业华为TaurusDB数据库国产替代要点全记录

国产化数据库全方位对比、从互联网企业的先进经验来看mysql的用法、及sql优化、sql异构修改、及数据同步方面都做了一些讲解

深耕互联网的码农,在AI及国产化浪潮下,希望把自己的能力输出给更多的人 1063

简单的自制随机数 C++

random函数中存在rand()可以生成随机数,但是一些场合仍需要 用户自己去编写随机数的算法。 原理 基数 base = 256.0 两个常数 a = 17.0 , b = 139.0 种子 r 按照下面的递归算法不断的去更新种子 Ri=mod(a∗Ri−1+b,base)Ri = mod( a * Ri-1 + b , base )Ri=mod(a∗Ri−1+b,base) 第i个生成的随机数为Pi=Ri/base第i个生成的随机数为Pi = Ri / base 第i个生成的随机数为Pi=Ri/bas

qq_52358098的博客 1030

深入解析DDR5 RFM机制:从JESD79-5标准到硬件实现

本文深入解析了DDR5内存标准中的关键机制——RFM(Refresh Management)。文章从JESD79-5标准出发,详细阐述了RFM如何通过RAA计数器实现从被动定时到主动响应的智能刷新管理,并探讨了其硬件实现细节、命令调度挑战及系统级设计考量,为芯片设计工程师优化DDR5内存子系统性能与可靠性提供了实践指导。

fff88的博客 486

正弦定理和余弦定理_正弦定理和余弦定理【20201106】

《爱好数学优学优》一、内容数学思想,数学思维,数学方法,后进转化,优秀培养,解题方法,高考研究,拔尖竞赛,优秀教案,优秀学案,优秀论文,名校推荐。二、免费同步课件下载请在微信公众号界面左下角单击,输入kjxz并发送。三、免费实用教学软件(一)程序:《Word转Ppu课件》(二)简介:本软件是一款服务于教育教学的专业免费工具,它体积小巧精悍,界面清爽大方,操作简单直观,广泛支持各类操作系统...

weixin_39691055的博客 227

激光雷达与相机融合(四)----基于激光雷达与相机的碰撞检测

在这一部分,基于前面的各个部分内容,将利用激光雷达和相机实现目标的检测分类及单目标跟踪,并对车辆前方的车辆目标计算相应的碰撞时间TTC。计算方法分别利用相机和雷达实现。 1.系统的总体架构: 2.TTC计算 简单介绍一下通过激光雷达和相机计算碰撞时间的原理: 利用激光雷达点计算碰撞时间:首先根据检测框聚类出前车目标的点,并过滤掉这些点中的离群点,然后找出这些点中相对于本车最近的点,基于前后两帧以及数据采集频率就可以求解出相对速度,然后用当前帧的距离除以速度得出当前的TTC。但该方法对最近点的选取稳定性不是

张飞飞的博客 3985

LVGL在嵌入式Linux系统上的高效移植与优化实践

本文详细介绍了在嵌入式Linux系统(特别是ARM平台)上移植和优化LVGL图形库的完整实践流程。内容涵盖从开发环境搭建、代码获取、CMake工程配置,到关键配置文件定制、显示与输入设备端口移植,以及内存、渲染等核心性能优化技巧,旨在帮助开发者高效构建流畅的嵌入式UI应用。

weixin_29274969的博客 450

随机数生成算法

转自:https://www.cnblogs.com/ECJTUACM-873284962/p/6926203.html 1、蒙特卡洛法   蒙特卡罗方法又称统计模拟法、随机抽样技术,是一种随机模拟方法,以概率和统计理论方法为基础的一种计算方法,是使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。将所求解的问题同一定的概率模型相联系,用电子计算机实现统计模拟或抽样,以获得问题的近似...

Fying2016的博客 5万+

麒麟v10(ky10.x86_64)升级——openssl-3.2.2、openssh-9.8p1

执行命令: make -j 4 && make install 这里要等待一段时间,等待编译完成。执行命令: ./configure --prefix=/usr/local/src/zlilb。执行命令: ./config --prefix=/usr/local/src/openssl。执行命令: make -j 4 && make test && make install。执行命令: make -j 4 && make install。执行命令: /etc/init.d/sshd restart。

X_yufei的博客 7428

bzoj3122【SDOI2013】随机数生成器

扩展欧几里得+BSGS

AaronPolaris 3465

汇川PLC和PLC之间ModebusTCP通讯

然后在全局变量中创建相应的变量关联IW和QW的寄存器创建全部变量//AM402作为主站——读H3U(D12-D21)//AM402作为主站——写给H3U(D200-D209)或者使用数组的方式。

panjinliang066333的博客 3万+

基于Cesium实现,动态水面+大坝排水动画

一、绘制面状水域,使用水波纹理,进行渲染,水体透明,可以看到底色。三、使用粒子系统,将喷泉改变方向,加上重力设置,实现排水动画。二、绘制线状三维体,用作模拟大坝拦截效果。四、最后,模拟水位上升,进行淹没分析,

一醉千秋的专栏 1418

BZOJ3122: [Sdoi2013]随机数生成器【BSGS】

3122: [Sdoi2013]随机数生成器 【题目描述】 传送门 【题解】 我们对于题目中的式子变换一下形式,Xi+1+k=a(Xi+k)X_{i+1}+k=a(X_i+k)Xi+1​+k=a(Xi​+k) 然后解出k=ba−1k=\frac{b}{a-1}k=a−1b​ 套上等比数列公式Xn=X1an−1+b(an−1−1)a−1\large X_n=X_1a^{n-1}+\frac{b(a^...

XSamsara的博客 AFO 194

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

bzoj3122: [Sdoi2013]随机数生成器

[Sdoi2013]随机数生成器 难得一个完全自己推出来的数论题,结果还因为特判挂了好几个星期,今天才把特判打出来A掉。 开始以为要求ax+bx≡c(mod p)这种形式的方程,然而并不会解,nc哥告诉我不是,我才想起来求通项公式(推了一节数学课推出来了)(mikufun推了一节物理课), $X_{i+1}=aX_i+b=a^2X_{i-1}+ab+b=a^3X_{i-2}+a^2...

weixin_30947043的博客 101

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

[SDOI2013]随机数生成器(BSGS)

[SDOI2013]随机数生成器 小W喜欢读书,尤其喜欢读《约翰克里斯朵夫》。最近小W准备读一本新书,这本书一共有P页,页码范围为0⋯P−1。 小W很忙,所以每天只能读一页书。为了使事情有趣一些,他打算使用NOI2012上学习的线性同余法生成一个序列,来决定每天具体读哪一页。 我们用Xi来表示通过这种方法生成出来的第i个数,也即小W第i天会读哪一页。这个方法需要设置3个参数a,b,X1,满足0≤a...

Tan_JX 337

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

P3306 [SDOI2013] 随机数生成器 题解

P3306 [SDOI2013] 随机数生成器 题解

ShiRoZeTsu 775

bzoj3122 [SDOI2013]随机数生成器

bzoj3122 [SDOI2013]随机数生成器 给定一个递推式, \(X_i=(aX_{i-1}+b)\mod P\) 求满足 \(X_k=t\) 的最小整数解,无解输出 \(-1\) \(0\leq a,\ b,\ t,\ P\leq10^9,\ P\) 为质数 BSGS 首先化式子,推得 \[X_k=a^{k-1}x+b\displaystyle\sum_{i=0}^{k-2}a_i...

weixin_34050005的博客 141

【BZOJ 3122】 [Sdoi2013]随机数生成器 (BSGS)

3122: [Sdoi2013]随机数生成器 Time Limit:10 SecMemory Limit:256 MBSubmit:1442Solved:552 Description Input 输入含有多组数据,第一行一个正整数T,表示这个测试点内的数据组数。接下来T行,每行有五个整数p,a,b,X1,t,表示一组数据。保证X1...

weixin_30455067的博客 165

「Luogu3306」[SDOI2013]随机数生成器

「Luogu3306」[SDOI2013]随机数生成器 problem Solution 我们来回忆一下数列递推公式求通项的方法 令\(Y_i=X_i+\frac{b}{a-1}\),则有 \[Y_i=aY_{i-1}\Rightarrow Y_i=a^{i-1}Y_1\] 于是题目转化为求解方程 \[t+\frac b{a-1}\equiv a^{x-1}(X_1+\frac b{a-1})\p...

weixin_34026276的博客 153

【BZOJ3122】[Sdoi2013]随机数生成器 BSGS+exgcd+特判

【BZOJ3122】[Sdoi2013]随机数生成器 Description Input 输入含有多组数据,第一行一个正整数T,表示这个测试点内的数据组数。接下来T行,每行有五个整数p,a,b,X1,t,表示一组数据。保证X1和t都是合法的页码。 注意:P一定为质数 Output 共T行,每行一个整数表示他最早读到第t页是哪一天。如果他永远不...

weixin_30908649的博客 93

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

洛咕 P3306 [SDOI2013]随机数生成器 大力推式子??? \(X_{i}=\underbrace{a(a(\cdots(a(a}_{i-1个a}X_1+b)))\cdots)\) \(=b+ba+ba^2+\cdots+ba^{i-3}+ba^{i-2}+X_1a^{i-1}\equiv t(\text{mod }p)\) \(b\frac{a^{i-1}-1}{a-1}+a^{i-...

weixin_30834019的博客 79

洛谷·[SDOI2013] 随机数生成器

洛谷P3306 [SDOI2013] 随机数生成器 BSGS

樱狸✨愿携清风归来处 327
上一篇: BSGS算法
下一篇: [HAOI2012] 道路
NephrenRuqInsania
博客等级 码龄8年 20粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值