news 2026/2/28 9:02:06

打卡信奥刷题(2536)用C++实现信奥 P2044 [NOI2012] 随机数生成器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
打卡信奥刷题(2536)用C++实现信奥 P2044 [NOI2012] 随机数生成器

P2044 [NOI2012] 随机数生成器

题目描述

栋栋最近迷上了随机算法,而随机数是生成随机算法的基础。栋栋准备使用线性同余法(Linear Congruential Method)来生成一个随机数列,这种方法需要设置四个非负整数参数m , a , c , X 0 m,a,c,X_0m,a,c,X0,按照下面的公式生成出一系列随机数{ X n } \{X_n\}{Xn}
X n + 1 = ( a X n + c ) m o d m X_{n+1}=(aX_n +c)\bmod mXn+1=(aXn+c)modm

其中m o d m \bmod mmodm表示前面的数除以m mm的余数。从这个式子可以看出,这个序列的下一个数总是由上一个数生成的。

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

栋栋知道这样产生的序列具有良好的随机性,不过心急的他仍然想尽快知道X n X_nXn是多少。由于栋栋需要的随机数是0 , 1 , … , g − 1 0,1,\dots,g-10,1,,g1之间的,他需要将X n X_nXn除以g gg取余得到他想要的数,即X n m o d g X_n \bmod gXnmodg,你只需要告诉栋栋他想要的数X n m o d g X_n \bmod gXnmodg是多少就可以了。

输入格式

一行6 66个用空格分割的整数m , a , c , X 0 , n m,a,c,X_0,nm,a,c,X0,ng gg,其中a , c , X 0 a,c,X_0a,c,X0是非负整数,m , n , g m,n,gm,n,g是正整数。

输出格式

输出一个数,即X n m o d g X_n \bmod gXnmodg

输入输出样例 #1

输入 #1

11 8 7 1 5 3

输出 #1

2

说明/提示

计算得X n = X 5 = 8 X_n=X_5=8Xn=X5=8,故( X n m o d g ) = ( 8 m o d 3 ) = 2 (X_n \bmod g) = (8 \bmod 3) = 2(Xnmodg)=(8mod3)=2

对于100 % 100\%100%的数据,n , m , a , c , X 0 ≤ 1 0 18 n,m,a,c,X_0\leq 10^{18}n,m,a,c,X010181 ≤ g ≤ 1 0 8 1\leq g\leq 10^81g108n , m ≥ 1 n,m\geq 1n,m1a , c , X 0 ≥ 0 a,c,X_0\geq 0a,c,X00

C++实现

#include<bits/stdc++.h>typedefunsignedlonglongull;usingnamespacestd;ull mod,a,c,x,n,g,mod1,m;ull ret,ans;inlineullmul(ull x,ull y){//龟速乘法for(ret=0;y;y>>=1){if(y&1)ret=(ret+x)%mod;x=(x+x)%mod;}returnret;}ullPow(ull a,ull k){//快速幂ull x=a;for(ans=1;k;k>>=1){if(k&1)ans=mul(ans,x);x=mul(x,x);}returnans;}ullSum(ull n,ull t){//n是长度 t是首项 m是公比if(n==1)returnt;ull ret=Sum(n/2,t);ret=(ret+mul(ret,Pow(m,n/2)))%mod;if(n&1)ret=(ret+mul(Pow(m,(n-1)),t))%mod;returnret;}intmain(){cin>>mod>>m>>c>>x>>n>>mod1;ull ans=Pow(m,n);ans=mul(ans,x);ans=(ans+Sum(n,c))%mod;cout<<ans%mod1;return0;}

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/25 6:40:18

Octo论文详解

论文&#xff1a;Octo&#xff1a;An Open-Source Generalist Robot Policy 1. 引言 机器人领域构建“通用策略模型”面临多重挑战&#xff0c;包括处理不同的机器人结构、传感器设置、动作空间、任务规格和环境条件等&#xff0c;考虑设计和开发一个具备广泛适应性的机器人策略…

作者头像 李华
网站建设 2026/2/26 11:21:24

基于python+django的学生就业管理的招聘系统(源码+lw+部署文档+讲解等)

课题介绍本课题聚焦校园就业招聘中信息不对称、流程管理低效的痛点&#xff0c;设计并开发基于PythonDjango的学生就业管理与招聘系统。系统以Python作为核心开发语言&#xff0c;依托Django框架搭建高效稳定的后端服务架构&#xff0c;负责处理多角色权限管控、招聘信息发布、…

作者头像 李华
网站建设 2026/2/27 0:16:25

JVM 之 内存溢出实战【OOM? SOF? 哪些区域会溢出?堆、虚拟机栈、元空间、直接内存溢出时各自的特点?以及什么情况会导致他们溢出?并模拟溢出】

实战&#xff1a;OutOfMemoryError异常 除了程序计数器外&#xff0c;堆、虚拟机栈、元空间、直接内存都有发生OOM的可能 下面我们演示下引起各区域OOM的情况&#xff0c;及观察下其异常表现&#xff0c;进而初步总结各异常时的调优策略 JVM调优实例&#xff1a; 堆&#xff1a…

作者头像 李华
网站建设 2026/2/27 6:45:05

磁链观测器实战:从仿真到代码的闭环之旅

磁链观测器(仿真&#xff0b;闭环代码参考文档&#xff09; 1.仿真采用simulink搭建&#xff0c;2018b版本 2.代码采用Keil软件编译&#xff0c;思路参考vesc中使用的方法&#xff0c;自己编写的代码能够实现0速闭环启动&#xff0c;并且标注有大量注释&#xff0c;方便学习。 …

作者头像 李华
网站建设 2026/2/28 4:11:02

基于TMS320F28335芯片的BUCK双闭环PI DSP代码

基于TMS320F28335芯片的BUCK双闭环&#xff08;PI&#xff09;DSP代码搞电力电子的老司机们对BUCK电路都不陌生&#xff0c;但要把双闭环PI控制塞进DSP里跑起来&#xff0c;这事儿还真得跟TMS320F28335的寄存器大战三百回合。今天咱们就扒开这个芯片的"内脏"&#xf…

作者头像 李华
网站建设 2026/2/27 22:17:40

vue基于spring的线上文印店打印店平台设计与实现_61624t38

目录具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;同时还支持java、ThinkPHP、Node.js、Spring B…

作者头像 李华