Description

小 W喜欢读 书,尤其喜欢读 书,尤其喜欢读《约翰克里斯 朵夫》。 最近小 W准备读一本新书,这本一共有 p页, 页码范围为 0..p -1。

小 W很忙,所以每天只能读一页书  。为了使事情有趣一些 ,他打算使用 NOI2012上学习的线性同余法生成 一个序列 ,来决定每天具体读哪一页 。

我们用 Xi来表示通过这种方法生成出来第 i个数 ,也即小 W第 i天会读 哪一页 。这个方法 需要设置 3个参数 a,b,X1,满足 0≤a,b,X1≤p-1,且 a, b,X1都是整数 。按照下面的公式 按照下面的公式生成出来一系列的 整数。

Xi+1= (aXi + b) mod p

其中 mod p 表示前面的数除以 p的余数。

可以发现,这个序列中下一个数总是由上一个数生成的 ,而且每一项都在 0..p -1这个范围内 ,是一个合法的页码。 同时需要注意 ,这种方法有可能导致某两天读的页码完全一样 。

小 W非常急切 地想去读这本书的第t页。所以他想知道, 对于一组给定的 a, b,X1,如果使用线性同余法来生成每一天读的页码, 最早读到第t页是在哪一天,或者指出他永远不会读到第t页。

Input

输入含有多组数据 ,第一行一个正整数T,表示这个测试点内的数据组数。

接下来 T行,每行有 五个整数 p,a,b,X1,t,表示一组数据。 保证 X1和 t都是合法的页码。

Output

共 T行,每行一个整数表示他最早读到第t页是哪一天 。如果他永远不会读到第t页,输出 -1。

Sample Input

37 1 1 3 37 2 2 2 07 2 2 2 1

Sample Output

13-1

Data Constraint

Hint

对于第一组数据,生成的序列为: 3,4,5,6,0…

对于第二 、三 组数据, 生成的序列为: 2,6,0,2…

Solution

BSGS。

套等差数列公式

现在已知x的第n+1项为t(即),求n+1的最小值

对于分母求逆元,对于整个式子BSGS

总结:注意同一个变量不能多用,多开几个变量就好了。同时对于每个相同或相似的过程最好统一一下变量名。

Code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define I int
#define ll long long
#define F(i,a,b) for(I i=a;i<=b;i++)
#define M 70921
using namespace std;
I T,p,a,b,x,t,m,now,ans,inf=0x7fffffff;
struct node{I v,c;}h[M+10];
void R(I &x){I w=1;x=0;char c=getchar();while(c<'0'||c>'9'){if(c=='-') w=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}x*=w;
}
I ksm(ll x,I k){ll sum=1;while(k){if(k&1) sum=(sum*x)%p;x=(x*x)%p;k>>=1;}return sum;
}
I hash(I x){I k=x%M;while(h[k].v>=0&&h[k].v!=x) if(++k==M) k=0;return k;
}
I main(){freopen("generator.in","r",stdin);freopen("generator.out","w",stdout);R(T);while(T--){ans=inf;R(p),R(a),R(b),R(x),R(t);if(x==t){printf("1\n");continue;}if(x==0&&b==0){printf("-1\n");continue;}if(a==0){printf(b==t?"2\n":"-1\n");continue;}if(a==1){if(!b){printf("-1\n");continue;}now=(ll)(t-x+p)%p*ksm(b,p-2)%p;printf("%d\n",now+1);continue;}memset(h,255,sizeof h);t=((1LL*t*a-t+b)%p+p)%p*ksm(((1LL*x*a-x+b)%p+p)%p,p-2)%p;m=sqrt(p);F(j,1,m){x=hash(t=1LL*t*a%p);h[x]=node{t,j};}now=ksm(a,m);x=1;F(i,1,m+1){t=hash(x=1LL*x*now%p);if(h[t].c>=0) ans=min(ans,i*m-h[t].c+1);}     printf((ans==inf)?"-1\n":"%d\n",ans);}return 0;
} 

3211. 【SDOI2013】随机数生成器相关推荐

  1. luogu P3306 [SDOI2013] 随机数生成器(BSGS,数列求通项,毒瘤特判)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 发个水题的 题解证明我还在() luogu P3306 [SDOI2013] 随机数生成器 Webli ...

  2. bzoj3122 [SDOI2013]随机数生成器

    bzoj3122 [SDOI2013]随机数生成器 给定一个递推式, \(X_i=(aX_{i-1}+b)\mod P\) 求满足 \(X_k=t\) 的最小整数解,无解输出 \(-1\) \(0\l ...

  3. bzoj3122 [Sdoi2013]随机数生成器(bsgs+扩欧+数列)

    Description Input 输入含有多组数据,第一行一个正整数T,表示这个测试点内的数据组数. 接下来T行,每行有五个整数p,a,b,X1,t,表示一组数据.保证X1和t都是合法的页码. 注意 ...

  4. 【bzoj3122】 Sdoi2013—随机数生成器

    http://www.lydsy.com/JudgeOnline/problem.php?id=3122 (题目链接) 题意 对于一个数列${X_i}$,其递推式为:${X_{i+1}=(a*X_i+ ...

  5. bzoj千题计划259:bzoj3122: [Sdoi2013]随机数生成器

    http://www.lydsy.com/JudgeOnline/problem.php?id=3122 等比数列求和公式+BSGS #include<map> #include<c ...

  6. 牛客——[SDOI2013]随机数生成器(推公式+BSGS)

    链接:https://ac.nowcoder.com/acm/problem/20362 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  7. 数论练习二之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 ...

  8. Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom

    Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom 文中的 Random即:java.util.Random, ThreadLocalRandom 即 ...

  9. 开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器

    原文:[原创]开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器                本博客所有文章分类的总目录:http://www.cnblogs.com/asxiny ...

  10. P5147 随机数生成器 [数列]

    P5147 随机数生成器 数学老师看不懂系列 看题目这一片代码就很晕: int work(int x) {if(x==1)return 0;else return work(rand(1,x))+1; ...

最新文章

  1. 谷歌发布史上最强人类大脑「地图」,1.3亿个突触,在线可视3D神经元「森林」!...
  2. jquery遍历table
  3. 类 Class 对象、定义、方法
  4. NgModule中的声明,提供程序和导入有什么区别?
  5. MySQL、Oracle、SQL Server
  6. norm--求矩阵和向量的范数
  7. 关于如如何运行tensorrt
  8. 因子分解机 Factorization Machine python 源码
  9. Problem G: 函数---判断日期(年月日)是否合法
  10. JsonView插件的使用
  11. 面试题31:连续子数组的最大和
  12. React封装多个日期段组件--BatchDate组件
  13. java下cmyk图片读取和转换rgb,以及图片压缩
  14. 【好文】敏捷中国十八年目睹之怪现状
  15. Python爬取上交所年报下载并转成TXT
  16. Filebeat自定义index和fields
  17. Python链家租房信息爬虫
  18. 智能客服搭建(1) - MRCP Server 搭建
  19. flv怎么转换成mp4格式?
  20. 数字化转型 — 新能源汽车 — 生产制造流程 — 总装车间

热门文章

  1. 手把手教你摆脱愚蠢的有道云笔记过上Typora的好日子
  2. 宝塔搭建TY博客附好看模板
  3. 网站排名SEO优化方案(2022最新)
  4. java break递归_如何利用Java递归解决“九连环”公式
  5. 它们养活了一票国产软件!这些开源软件你知道吗
  6. Beta冲刺-星期五
  7. windows10安装Ubuntu20.04及界面图形化
  8. html引用外部css文件(使用绝对路径)
  9. 伦敦用人脸识别抓错人!专家:要结合DNA技术才行 | 研究
  10. 【Arduino基础】蜂鸣器发声实验