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\]
因此
\[\begin{aligned}\displaystyle\sum_{i=0}^{k-2}a_i&\equiv\frac{t-a^{k-1}x}{b}\pmod P\\\frac{a^{k-1}-1}{a-1}&\equiv\frac{t-a^{k-1}x}{b}\pmod P\\a^{k-1}(b-x+ax)&\equiv at-t+b\pmod P\\a^{k-1}&\equiv\frac{at-t+b}{b-x+ax}\pmod P\end{aligned}\]
所以上 \(BSGS\)
然而这题特判很恶心,不加特判 \(0\text{pts}\)
特判如下:
- \(x=t:ans=1\)
- \(a=1\)
- \(b=0:ans=-1\)
- \(b\neq0:ans=\frac{t-x}{b}+1\)
- \(a=0\)
- \(b=t:ans=2\)
- \(b\neq t:ans=-1\)
时间复杂度 \(O(T\sqrt P)\)
代码
#include <bits/stdc++.h>
using namespace std;int P;int qp(int a, int k) {int res = bool(a);for (; k; k >>= 1, a = 1ll * a * a % P) {if (k & 1) res = 1ll * res * a % P;}return res % P;
}int bsgs(int a, int b) {if (!a && b) return -1;map <int, int> s;int sz = sqrt(P), inv_a = qp(a, P - 2), pw = qp(a, sz), cur = 1;for (int i = 0; i <= sz; i++) {s.insert(make_pair(1ll * b * cur % P, i)), cur = 1ll * cur * inv_a % P;}cur = 1;map <int, int> :: iterator it;for (int i = 0; i <= sz; i++, cur = 1ll * cur * pw % P) {if ((it = s.find(cur)) != s.end()) {return i * sz + (it -> second);}}return -1;
}int main() {int Tests, a, b, x, t, A, B;scanf("%d", &Tests);while (Tests--) {scanf("%d %d %d %d %d", &P, &a, &b, &x, &t);a %= P, b %= P, x %= P, t %= P;if (x == t) {puts("1"); continue;} else if (a == 1) {if (!b) {puts("-1"); continue;}printf("%d\n", 1ll * (t - x + P) * qp(b, P - 2) % P + 1);continue;} else if (!a) {puts(b == t ? "2" : "-1");continue;}A = a, B = 1ll * (1ll * a * t - t + b + P) % P * qp((b - x + 1ll * a * x + P) % P, P - 2) % P;int ans = bsgs(A, B);printf("%d\n", ~ans ? ans + 1 : ans);}return 0;
}
转载于:https://www.cnblogs.com/Juanzhang/p/10659176.html
bzoj3122 [SDOI2013]随机数生成器相关推荐
- bzoj3122 [Sdoi2013]随机数生成器(bsgs+扩欧+数列)
Description Input 输入含有多组数据,第一行一个正整数T,表示这个测试点内的数据组数. 接下来T行,每行有五个整数p,a,b,X1,t,表示一组数据.保证X1和t都是合法的页码. 注意 ...
- bzoj千题计划259:bzoj3122: [Sdoi2013]随机数生成器
http://www.lydsy.com/JudgeOnline/problem.php?id=3122 等比数列求和公式+BSGS #include<map> #include<c ...
- luogu P3306 [SDOI2013] 随机数生成器(BSGS,数列求通项,毒瘤特判)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 发个水题的 题解证明我还在() luogu P3306 [SDOI2013] 随机数生成器 Webli ...
- 【bzoj3122】 Sdoi2013—随机数生成器
http://www.lydsy.com/JudgeOnline/problem.php?id=3122 (题目链接) 题意 对于一个数列${X_i}$,其递推式为:${X_{i+1}=(a*X_i+ ...
- 牛客——[SDOI2013]随机数生成器(推公式+BSGS)
链接:https://ac.nowcoder.com/acm/problem/20362 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- 数论练习二之BSGS算法——随机数生成器,Matrix,Lunar New Year and a Recursive Sequence,Fermat‘s Last Theorem
[SDOI2013] 随机数生成器 description solution 肯定是非常想找一个通项公式来表示第nnn个数的 依据形式,考虑化成等比数列 xi+1+k=a(xi+k)=a⋅xi+b+t ...
- Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom
Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom 文中的 Random即:java.util.Random, ThreadLocalRandom 即 ...
- 开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器
原文:[原创]开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器 本博客所有文章分类的总目录:http://www.cnblogs.com/asxiny ...
- P5147 随机数生成器 [数列]
P5147 随机数生成器 数学老师看不懂系列 看题目这一片代码就很晕: int work(int x) {if(x==1)return 0;else return work(rand(1,x))+1; ...
最新文章
- 【Kaggle-MNIST之路】CNN+改进过的损失函数+多次的epoch(四)
- 小Z的房间[HEOI2015] (matrix-tree定理)
- java日志处理汇总
- 像素画高级教程:怎样画流动的水
- yum配置文件 重启后还原_江湖救急 : CentOS7.5 /usr 目录误删, 恢复操作.
- Python(13)-函数,lambda语句
- java 自定义报表_设计好的报表是如何在 web 上显示的
- 机器视觉:PC式视觉系统与嵌入式视觉系统区别
- 0514JS练习:函数
- 天龙八部linux 换win,Linux从菜鸟到大师之天龙八部 第三部文本编辑处理.doc
- 对视频播放url进行Blob加密
- python爬取qq群成员_Python爬取QQ群群员
- HC05 蓝牙控制LED问题
- 题解 2020级HAUT新生周赛(二)
- FL Studio20.9DAW宿主电子音乐制作软件
- (数据结构基础)Among the following threaded binary trees (the threads are represented by dotted curves),……
- oracle重做日志详解,oracle数据文件、控制文件、重做日志文件详解
- chatgpt为什么在中国不能用
- Redis 实现搜索关键词自动补全
- 沃尔什函数 与 沃尔什-哈达玛变换
热门文章
- boost::hana::sum用法的测试程序
- boost::describe模块宏BOOST_DESCRIBE_PP_POINTER的测试程序
- boost::core模块实现分配器重新绑定的实例
- Boost:bzip2解压缩器
- ITK:在图像区域上运行图像过滤器
- VTK:图片之PickPixel
- OpenCV使用Sobel或Scharr OpenCV函数进行边缘检测的实例(附完整代码)
- OpenCV 错误级别分析ELA的实例(附完整代码)
- C++ 循环链表circular linked list实现算法(附完整源码)
- C++Miller Rabin算法的实现(附完整源码)