【bzoj3122】: [Sdoi2013]随机数生成器

当a>=2 化简得

然后 BSGS 求解

其他的特判 :

当 x=t  n=1

当 a=1 

当 a=0 判断b==t

  1. /* http://www.cnblogs.com/karl07/ */
  2. #include <cstdlib>
  3. #include <cstdio>
  4. #include <cstring>
  5. #include <cmath>
  6. #include <map>
  7. #include <algorithm>
  8. using namespace std;
  9.  
  10. #define LL long long
  11. int T;
  12. LL a,b,x,t,p;
  13.  
  14. LL Q_pow(LL x,LL y,LL p){
  15. LL ans=;
  16. while (y){
  17. if (y&) ans=ans*x%p;
  18. x=x*x%p; y=(y>>);
  19. }
  20. return ans;
  21. }
  22.  
  23. LL BSGS(LL a,LL b,LL p){
  24. if ((a== && b!=) || (a== && b!=)) return -;
  25. map<LL,LL> x;
  26. LL sz=ceil(sqrt(p)),k=,inv;
  27. x.clear();
  28. x[]=; inv=Q_pow(Q_pow(a,sz,p),p-,p);
  29. for (int i=;i<sz;i++){
  30. k=k*a%p;
  31. if (!x.count(k)) x[k]=i;
  32. }
  33. for (int i=;i<sz;i++){
  34. if (x.count(b)) return i*sz+x[b];
  35. b=b*inv%p;
  36. }
  37. return -;
  38. }
  39.  
  40. int main(){
  41. scanf("%d",&T);
  42. for (int tt=;tt<=T;tt++){
  43. scanf("%lld%lld%lld%lld%lld",&p,&a,&b,&x,&t);
  44. if (x==t) {
  45. puts("");
  46. }else{
  47. if (a==) {
  48. printf("%d\n",b==t ? : -);
  49. }
  50. if (a==) {
  51. printf("%lld\n",b== ? - : (t-x+p)%p*Q_pow(b,p-,p)%p+);
  52. }
  53. if (a>=){
  54. LL inv=Q_pow(a-,p-,p);
  55. b=b*inv%p;
  56. t=(t+b)%p;
  57. x=(x+b)%p;
  58. t=t*Q_pow(x,p-,p)%p;
  59. printf("%lld\n",BSGS(a,t,p)+);
  60. }
  61. }
  62. }
  63. return ;
  64. }

【bzoj3122】: [Sdoi2013]随机数生成器 数论-BSGS的更多相关文章

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

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

  2. 【BZOJ3122】随机数生成器(BSGS,数论)

    [BZOJ3122]随机数生成器(BSGS,数论) 题面 BZOJ 洛谷 题解 考虑一下递推式 发现一定可以写成一个 \(X_{i+1}=(X_1+c)*a^i-c\)的形式 直接暴力解一下 \(X_ ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. HTTP-Runoob:HTTP简介

    ylbtech-HTTP-Runoob:HTTP简介 1.返回顶部 1. HTTP 简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网 ...

  2. c语言-单链表(二)

    继续复习链表知识点,本章包含单链表的增加,删除,判断是否为空,和链表长度,以及链表的排序 几个知识点 1.链表的判断是否为空 //1.判断链表是否为空 bool isempty_list(PNODE ...

  3. Win7无法访问Windows共享文件夹

    解决方法如下 On the Windows 7 machine: Run secpol.msc Drill down through Local Policies | Security Options ...

  4. oracle connect by用法篇 (包括树遍历)之二

    3.2查询当前时间往前的12周的开始时间.结束时间.第多少周 , ) - (rownum ) as startDate, sysdate , 'd'))) - (rownum ) as endDate ...

  5. leetcode661

    vector<vector<int>> imageSmoother(vector<vector<int>>& M) { ; vector< ...

  6. LNMP 1.5 php-fpm配置文件

    php-fpm配置文件: /usr/local/php/etc/php-fpm.conf    :php-fpm服务的配置文件 /usr/local/php/etc/php.ini       :ph ...

  7. LAMP 2.7 Apache通过rewrite限制某个目录

    我们可以 allow 和 deny 去现在网站根目录下的某个子目录,当然这个 rewrite 也可以实现,配置如下: 创建一个目录和文件随便写些东西 mkdir /data/www/data/tmp ...

  8. 使用Ping命令解析主机名解析出来的是IPv6

    如果你经常使用ping命令,并身处局域网,那么你肯定会有这样一个疑问:Ping计算机名为何是IPv6地址? 问这个问题的人很少见,大多都是对网络知识稍有了解的人,所以才会闻到关于ping的问题,而且在 ...

  9. vmstat详细说明

    下面是关于Unix下vmstat命令的详细介绍,收录在这里,以备日后参考 vmstat是用来实时查看内存使用情况,反映的情况比用top直观一些.作为一个CPU监视器,vmstat命令比iostat命令 ...

  10. 一个servlet处理多个请求(使用Method的反射机制)

    方法一 可以通过在请求的时候加上参数,然后在servlet中获取请求的参数,再去调用对应的方法.达到一个servlet处理多个请求的目的 test.jsp: <%@ page language= ...