洛咕 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-1}x_1\equiv t(\text{mod }p)\)
拆分一波,提出\(a^{i-1}\)
\((X_1+\frac{b}{a-1})a^{i-1}\equiv \frac{b}{a-1}+t(\text{mod }p)\)
\(a^{i-1}\equiv \frac{\frac{b}{a-1}+t}{\frac{b}{a-1}+X_1} (\text{mod }p)\)
然后bsgs即可。
这题还要加一堆特判。。。懒得写了。。。丧心病狂
#include<bits/stdc++.h>
#define il inline
#define vd void
typedef long long ll;
il int gi(){
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}
ll T,mod,a,b,X1,t;
il ll pow(ll a,ll b){
ll ret=1;
while(b){
if(b&1)ret=ret*a%mod;
a=a*a%mod;b>>=1;
}
return ret;
}
std::map<ll,ll>M;
int main(){
#ifndef ONLINE_JUDGE
freopen("3306.in","r",stdin);
freopen("3306.out","w",stdout);
#endif
T=gi();
while(T--){
mod=gi(),a=gi(),b=gi(),X1=gi(),t=gi();
ll B=(t+b*pow(a-1,mod-2)%mod)%mod,A=(B-t+X1+mod)%mod,C=B*pow(A,mod-2)%mod;
ll s=sqrt(mod)+1,ans=1e18;
if(t==X1){puts("1");continue;}
if(a==1){
A=b,B=(t-X1+mod)%mod;
if(b==0||A%std::__gcd(B,mod))puts("-1");
else printf("%lld\n",((t-X1+mod)*pow(b,mod-2)%mod)%mod+1);
continue;
}
if(a==0){printf("%lld\n",b==t?2ll:(-1ll));continue;}
M.clear();
for(ll i=0,j=C%mod;i<s;++i,j=j*a%mod)M[j]=i;
ll P=pow(a,s);
for(ll i=1,j=P;i<=s+1;++i,j=j*P%mod)if(M.find(j)!=M.end())ans=std::min(ans,i*s-M[j]);
if(ans==1e18)puts("-1");
else printf("%lld\n",ans+1);
}
return 0;
}
洛咕 P3306 [SDOI2013]随机数生成器的更多相关文章
- 洛谷P3306 [SDOI2013]随机数生成器(BSGS)
传送门 感觉我BSGS都白学了……数学渣渣好像没有一道数学题能自己想出来…… 要求$X_{i+1}=aX_i+b\ (mod \ \ p)$ 左右同时加上$\frac{b}{a-1}$,把它变成等比数 ...
- P3306 [SDOI2013]随机数生成器(bzoj3122)
洛谷 bzoj 特判+多测真恶心 . \(0\le a\le P−1,0\le b\le P−1,2\le P\le 10^9\) Sample Input 3 7 1 1 3 3 7 2 2 2 0 ...
- P3306 [SDOI2013]随机数生成器
思路:\(BSGS\) 提交:\(1\)次 题解: 原式可以化为\[x_{i+1}+\frac{b}{a-1}=a(x_{i}+\frac{b}{a-1})\mod p\] 这不是等比数列吗? \[x ...
- 【BZOJ 3122】 [Sdoi2013]随机数生成器 (BSGS)
3122: [Sdoi2013]随机数生成器 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1442 Solved: 552 Description ...
- bzoj3122 [SDOI2013]随机数生成器
bzoj3122 [SDOI2013]随机数生成器 给定一个递推式, \(X_i=(aX_{i-1}+b)\mod P\) 求满足 \(X_k=t\) 的最小整数解,无解输出 \(-1\) \(0\l ...
- 【BZOJ3122】[Sdoi2013]随机数生成器 BSGS+exgcd+特判
[BZOJ3122][Sdoi2013]随机数生成器 Description Input 输入含有多组数据,第一行一个正整数T,表示这个测试点内的数据组数. 接下来T行,每行有五个整数p,a,b, ...
- 【bzoj3122】: [Sdoi2013]随机数生成器 数论-BSGS
[bzoj3122]: [Sdoi2013]随机数生成器 当a>=2 化简得 然后 BSGS 求解 其他的特判 : 当 x=t n=1 当 a=1 当 a=0 判断b==t /* http: ...
- 【洛谷 P3306】[SDOI2013]随机数生成器 (BSGS)
题目链接 怎么这么多随机数生成器 题意见原题. 很容易想到\(BSGS\)算法,但是递推式是\(X_{i+1}=(aX_i+b)\mod p\),这显然不是一个等比数列. 但是可以用矩阵乘法来求出第\ ...
- bzoj 3122: [Sdoi2013]随机数生成器
#include<cstdio> #include<iostream> #include<map> #include<cmath> #define ll ...
随机推荐
- [翻译] BTSimpleRippleButton
BTSimpleRippleButton https://github.com/balram3429/btSimpleRippleButton This is a custom button for ...
- OpenGLES渲染
OpenGLES渲染 OpenGLES使用GPU渲染图片,不占用CPU,但其使用还是挺复杂的. 先用OpenGLES显示一张图片: // // ShowViewController.m // Open ...
- json格式转换(json,csjon)(天气预报)
json格式数据默认为string,可以使用eval()函数或者json模块将其转换为dict.标准Json字符串必须使用双引号(")而不能使用单引号('),否则从字符串转换成dict类型会 ...
- UNIX高级环境编程(5)Files And Directories - 文件相关时间,目录文件相关操作
1 File Times 每个文件会维护三个时间字段,每个字段代表的时间都不同.如下表所示: 字段说明: st_mtim(the modification time)记录了文件内容最后一次被修改的时 ...
- Git操作(基础篇)
Git操作(基础篇) Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.Git的读音为/gɪt/.Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常 ...
- 1031. [JSOI2007]字符加密【后缀数组】
Description 喜欢钻研问题的JS同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法 :把需要加密的信息排成一圈,显然,它们有很多种不同的读法.例如下图,可以读作 ...
- base大家族详解
base大家族详解 */--> pre.src {background-color: #292b2e; color: #b2b2b2;} pre.src {background-color: # ...
- P1841 [JSOI2007]重要的城市
题目描述 参加jsoi冬令营的同学最近发现,由于南航校内修路截断了原来通向计算中心的路,导致去的路程比原先增加了近一公里.而食堂门前施工虽然也截断了原来通向计算中心的路,却没有使路程增加,因为可以找到 ...
- HDU 1251 统计难题(字典树入门模板题 很重要)
统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submi ...
- CSU 2056 a simple game (正反进行KMP)超级好题!!!
Description 这一天,小A和小B在玩一个游戏,他俩每人都有一个整数,然后两人轮流对他们的整数进行操作,每次在下列两个操作任选一个: (1)对整数进行翻转,如1234翻转成4321 ,1200 ...