1. #include<cstdio>
  2. #include<cstring>
  3. #include<cmath>
  4. #include<iostream>
  5. #include<map>
  6. using namespace std;
  7. typedef long long ll;
  8. struct Thash{
  9. static const int MOD=;
  10. static const int MAXN=1e6+;
  11. int tot,head[MOD+],next[MAXN],h[MAXN],val[MAXN];
  12. inline void clear(){tot=;memset(head,,sizeof head);}
  13. inline void insert(int H,int VAL){
  14. for(int i=head[H%MOD];i;i=next[i]) if(h[i]==H){val[i]=VAL;return ;}
  15. next[++tot]=head[H%MOD];head[H%MOD]=tot;h[tot]=H;val[tot]=VAL;
  16. }
  17. inline int get(int H){
  18. for(int i=head[H%MOD];i;i=next[i]) if(h[i]==H) return val[i];
  19. return ;
  20. }
  21. }M;
  22. int T;
  23. ll p,a,b,x1,t;
  24. inline int read(){
  25. int x=,f=;char ch=getchar();
  26. while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
  27. while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
  28. return x*f;
  29. }
  30. ll fpow(ll a,ll p,ll mod){
  31. ll res=;
  32. for(;p;p>>=,a=a*a%mod) if(p&) res=res*a%mod;
  33. return res;
  34. }
  35. void exgcd(ll a,ll b,ll &d,ll &x,ll &y){
  36. if(!b){d=a;x=;y=;return ;}
  37. exgcd(b,a%b,d,y,x);
  38. y-=x*(a/b);
  39. }
  40. ll BSGS(ll A,ll B,ll mod){
  41. A%=mod;
  42. if(!A){
  43. if(!B) return ;
  44. return -;
  45. }
  46. ll m=sqrt(mod)+,ni=fpow(A,mod-m-,mod);
  47. ll t=,y=;
  48. M.clear();
  49. M.insert(,m+);
  50. for(int i=;i<m;i++){
  51. t=t*A%mod;
  52. if(!M.get(t)) M.insert(t,i);
  53. }
  54. for(int i=;i<m;i++){
  55. int u=M.get(B*y%mod);
  56. if(u){
  57. if(u==m+) u=;
  58. return i*m+u;
  59. }
  60. y=y*ni%mod;
  61. }
  62. return -;
  63. }
  64. ll calc1(){
  65. ll z=(t-x1+p)%p,d,x,y;
  66. exgcd(b,p,d,x,y);
  67. if(z%d) return -;z/=d;
  68. x=x*z%p;
  69. if(x<) x+=p;
  70. return x+;
  71. }
  72. ll calc2(){
  73. ll c=fpow(a-,p-,p),A=(x1+b*c)%p,z=(b*c+t)%p,d,x,y;
  74. exgcd(A,p,d,x,y);
  75. if(z%d) return -;z/=d;
  76. if(x<p) x=x%p+p;
  77. d=BSGS(a,x*z%p,p);
  78. if(~d) return d+;
  79. return -;
  80. }
  81. ll solve(){
  82. if(x1==t) return ;
  83. if(!a){
  84. if(b==t) return ;
  85. else return -;
  86. }
  87. if(a==) return calc1();
  88. return calc2();
  89. }
  90. int main(){
  91. freopen("random.in","r",stdin);
  92. freopen("random.out","w",stdout);
  93. for(T=read();T--;){
  94. p=read();a=read();b=read();x1=read();t=read();
  95. printf("%lld\n",solve());
  96. }
  97. return ;
  98. }

[Sdoi2013]随机数生成器(BSGS)的更多相关文章

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

    3122: [Sdoi2013]随机数生成器 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1442  Solved: 552 Description ...

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

    [BZOJ3122][Sdoi2013]随机数生成器 Description Input 输入含有多组数据,第一行一个正整数T,表示这个测试点内的数据组数.   接下来T行,每行有五个整数p,a,b, ...

  3. BZOJ3122: [Sdoi2013]随机数生成器(BSGS)

    题意 题目链接 Sol 这题也比较休闲. 直接把\(X_{i+1} = (aX_i + b) \pmod P\)展开,推到最后会得到这么个玩意儿 \[ a^{i-1} (x_1 + \frac{b}{ ...

  4. bzoj 3122 : [Sdoi2013]随机数生成器 BSGS

    BSGS算法 转自:http://blog.csdn.net/clove_unique 问题 给定a,b,p,求最小的非负整数x,满足$a^x≡b(mod \ p)$ 题解 这就是经典的BSGS算法, ...

  5. 【bzoj3122】[Sdoi2013]随机数生成器 BSGS思想的利用

    题目描述 给出递推公式 $x_{i+1}=(ax_i+b)\mod p$ 中的 $p$.$a$.$b$.$x_1$ ,其中 $p$ 是质数.输入 $t$ ,求最小的 $n$ ,使得 $x_n=t$ . ...

  6. [bzoj3122][SDOI2013]随机数生成器 ——BSGS,数列

    题目大意 给定递推序列: F[i] = a*F[i-1] + b (mod c) 求一个最小的i使得F[i] == t 题解 我们首先要化简这个数列,作为一个学渣,我查阅了一些资料: http://d ...

  7. Bzoj 3122 [Sdoi2013]随机数生成器(BSGS+exgcd)

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

  8. 【bzoj3122】: [Sdoi2013]随机数生成器 数论-BSGS

    [bzoj3122]: [Sdoi2013]随机数生成器 当a>=2 化简得 然后 BSGS 求解 其他的特判 : 当 x=t  n=1 当 a=1  当 a=0 判断b==t /* http: ...

  9. 【BZOJ-3122】随机数生成器 BSGS

    3122: [Sdoi2013]随机数生成器 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1362  Solved: 531[Submit][Sta ...

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

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

随机推荐

  1. OpenSessionInViewFilter的配置

    OpenSessionInViewFilter是用来处理懒加载异常的. 懒加载异常的意思的就是:还用不到的东西,就先不加载,等需要的时候再来加载. 所以懒加载对性能有一定的提升,但是,这也会出现一些问 ...

  2. ASIHttpRequest请求时的默认编码

    在ASIHttpRequest.m文件 中的 - (id)initWithURL:(NSURL *)newURL方法中找到 [self setDefaultResponseEncoding:NSISO ...

  3. MySQL5.7 基于二进制包的安装

    1.MySQL5.7安装注意事项 1.在MySQL5.7中mysql_install_db已经不再推荐使用,建议改成mysqld-initialize 完成实力初始化.(mysql_install_d ...

  4. 线程阻塞工具类:LockSupport(读书笔记)

     他可以在线程任意位置让线程阻塞, LockSupport的静态方法park()可以阻塞当前线程,类似的还有parkNanos() ParkUntil()等,他们实现了一个限时等待 public cl ...

  5. Laravel之Session

    一.配置 Session 配置文件位于config/session.php .默认情况下,Laravel 使用的session 驱动为文件驱动,这对许多应用而言是没有什么问题的.在生产环境中,你可能考 ...

  6. Laravel之认证服务

    一.用户认证 配置文件在config/auth.php下 1.添加认证路由 // 认证路由... Route::get('auth/login', 'Auth\AuthController@getLo ...

  7. STL学习笔记(第五章 STL组件)

    STL组件 若干精心勾画的组件共同合作,构筑起STL的基础.这些组件最关键的是容器.迭代器和算法. 下图演示了STL组件之间的合作 容器(Containers) 容器类别(简称容器)用来管理一组元素. ...

  8. 51单片机 | 并行I/O口扩展实例(74LS244/74LS373/4071)

    并行I/O口扩展实例 //<51单片机原理及应用(第二版)——基于Keil C与Proteus>第四章例4.4 I/O口不能完全用于输入/输出操作,当需要扩展外部存储器时,P0.P2口用作 ...

  9. javascript---》arguments对象

    使用arguments可以直接访问函数传入的实参 如:arguments[0]访问第一个参数,arguments[1]访问第二个参数 arguments.length检测函数的参数个数 如: func ...

  10. R 包的安装,使用,更新

    R包的使用方法 包就是提供了种类繁多的函数,当然还有它的一些数据集,可以使用这些函数来操作这些数据集,来学习使用. library(),当前的工作环境里,可以使用的包 包的帮助文档:help(pack ...