Description

Input

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

注意:P一定为质数

Output

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

Sample Input

3
7 1 1 3 3
7 2 2 2 0
7 2 2 2 1

Sample Output

1
3
-1

HINT

0<=a<=P-1,0<=b<=P-1,2<=P<=10^9

【思路】

逆元,BSGS算法

首先特判:a=0,a=1,当a=1时,序列为:

x1,x1+b,x1+2*b

即(x1+(n-1)*b) mod p=t,用个乘法逆元可以求出,当逆元为0的时候无解输出-1。

当a>=2时

可以得到通项公式:

xn=[
a^n-1 *(x1+b/(a-1))-b/(a-1) ] mod p

若满足xn=t,则有

a^n-1 = (b* (a-1)^-1 +t) * (b*(a-1)^-1+x1)^-1
mod p

于是可以用BSGS算法求n-1。

需要注意的是各种取模p一定要有。

【代码】

  1. #include<map>
  2. #include<cmath>
  3. #include<cstdio>
  4. #include<iostream>
  5. using namespace std;
  6.  
  7. typedef long long LL;
  8. const int N = 1e4+;
  9.  
  10. LL pow(LL x,LL p,LL MOD) {
  11. LL ans=;
  12. while(p) {
  13. if(p&) ans=(ans*x)%MOD;
  14. x=(x*x)%MOD;
  15. p>>=;
  16. }
  17. return ans;
  18. }
  19. map<LL,int> mp;
  20. LL BSGS(LL a,LL b,LL MOD) {
  21. a%=MOD;
  22. int m=sqrt(MOD)+; mp.clear();
  23. LL am=pow(pow(a,m,MOD),MOD-,MOD);
  24. LL x=; mp[]=;
  25. for(int i=;i<m;i++) {
  26. x=(x*a)%MOD;
  27. if(!mp.count(x)) mp[x]=i;
  28. }
  29. for(int i=;i<m;i++) {
  30. if(mp.count(b)) return i*m+mp[b];
  31. b=(b*am)%MOD;
  32. }
  33. return -;
  34. }
  35.  
  36. LL p,a,b,x1,t;
  37.  
  38. int main() {
  39. //freopen("in.in","r",stdin);
  40. //freopen("out.out","w",stdout);
  41. int T;
  42. scanf("%d",&T);
  43. while(T--) {
  44. cin>>p>>a>>b>>x1>>t;
  45. LL c=pow(a-,p-,p),d,x,y,con,inv;
  46. if(x1==t) puts(""); else
  47. if(!a) {
  48. if(t==b) puts("");
  49. else puts("-1");
  50. } else
  51. if(a==) {
  52. inv=pow(b,p-,p);
  53. if(!inv) puts("-1");
  54. else printf("%lld\n",((inv*(t-x1+p)%p)+p)%p+);
  55. } else {
  56. con=((((b*c+t)%p)*(pow((x1+b*c)%p,p-,p)))%p+p)%p;
  57. printf("%lld\n",BSGS(a,con,p)+);
  58. }
  59. }
  60. return ;
  61. }

bzoj 3122 [Sdoi2013]随机数生成器(逆元,BSGS)的更多相关文章

  1. bzoj 3122: [Sdoi2013]随机数生成器【BSGS】

    题目要求的是: \[ ...a(a(a(ax+b)+b)+b)+b...=a^nx+a^{n-1}b+a^{n-2}b+...+b\equiv t(mod\ p) \] 后面这一大坨看着不舒服,所以考 ...

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

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

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

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

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

    #include<cstdio> #include<iostream> #include<map> #include<cmath> #define ll ...

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

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

  6. 【洛谷 P3306】[SDOI2013]随机数生成器 (BSGS)

    题目链接 怎么这么多随机数生成器 题意见原题. 很容易想到\(BSGS\)算法,但是递推式是\(X_{i+1}=(aX_i+b)\mod p\),这显然不是一个等比数列. 但是可以用矩阵乘法来求出第\ ...

  7. [Sdoi2013]随机数生成器(BSGS)

    #include<cstdio> #include<cstring> #include<cmath> #include<iostream> #inclu ...

  8. 洛谷P3306 [SDOI2013]随机数生成器(BSGS)

    传送门 感觉我BSGS都白学了……数学渣渣好像没有一道数学题能自己想出来…… 要求$X_{i+1}=aX_i+b\ (mod \ \ p)$ 左右同时加上$\frac{b}{a-1}$,把它变成等比数 ...

  9. BZOJ3122 [Sdoi2013]随机数生成器 【BSGS】

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

随机推荐

  1. sentos 上安装vnc图形界面

    一.安装gnome图形化桌面   CentOS 6.3 64位 #yum groupinstall -y "X Window System" #yum groupinstall - ...

  2. MCM试题原文及翻译 AB题 2014美国数学建模竞赛

    MCM试题原文及翻译 AB题 2014美国数学建模竞赛 原创翻译,如有瑕疵,敬请谅解. 转载请注明:过客小站 » MCM试题原文及翻译 AB题 2014美国数学建模竞赛 PROBLEM A: The  ...

  3. HDU1465+递推

    经典的信封装信问题 f[ n ]  = ( n-1 ) * ( f[ n-1 ]+f[ n-2 ] ) #include<stdio.h> #include<string.h> ...

  4. linux MySQL安装配置

    执行下面的命令初始化授权表: ./scripts/mysql_install_db --user=mysql

  5. Android ExpandableListView 带有Checkbox的简单应用

    expandablelistview2_groups.xml <?xml version="1.0" encoding="utf-8"?> < ...

  6. objective-c 在线视频 学习资料...

    ---视频 http://www.lanou3g.com/newslist.php?cid=7 http://edu.51cto.com/lesson/id-15489.html http://www ...

  7. Java Web开发 之小张老师总结中文乱码解决方案

    中文乱码:在以后学习过程中全部采用UTF-8 1.文件的乱码 1.1.项目文本文件默认编码:        [右击项目]->[Properties]->[Resource]->[Te ...

  8. mysql查看数据库命令

    mysql查看数据库命令 打开的数据库的命令 mysql> use mysql Database changed 查看数据库的命令 mysql> show databases; 查看数据表 ...

  9. photoshop:制作木板木纹

    1.设置颜色为木头相近颜色 2.滤镜->渲染->云彩 3.滤镜->杂色->添加杂色 4.滤镜->模糊->动感模糊 5.用矩形选取选取某块区域 6.滤镜->扭曲 ...

  10. Android:控件布局(相对布局)RelativeLayout

    RelativeLayout是相对布局控件:以控件之间相对位置或相对父容器位置进行排列. 相对布局常用属性: 子类控件相对子类控件:值是另外一个控件的id android:layout_above-- ...