又是写了一晚上才过的题…

题意:有一个数列$x_n=(ax_{n-1}+b) mod p$,给你$x_1,a,b,p,t$,求最小的$x_i=t$的$i$,可能不存在


一开始很自然的推出了式子$x_n \equiv a^{n-1}x_1+b*\frac{a^{n-1}-1}{a-1} \pmod p$

这时候如果$a=1$的话就特判一下然后用exgcd做

否则让$x_n=T$得到$a^{n-1}*(ax_1-x_1+b) \equiv (a-1)T+b \pmod p$

如果$ax_1-x_1+b$存在逆元的话就两边乘上逆元然后BSGS做,不存在逆元就无解啦

然后我判a=0的时候当t=b的时候返回了1…然后交上去一直wa还拍不出来

#include<cstdio>
#include<cmath>
#include<map>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long lint; inline lint read()
{
lint s=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){s=s*10+c-'0';c=getchar();}
return s*f;
} map<lint,lint>x; inline lint gcd(lint a,lint b)
{
return !b?a:gcd(b,a%b);
} inline lint exgcd(lint a,lint b,lint &x,lint &y)
{
if(b==0)
{
x=1;y=0;
return a;
}lint d=exgcd(b,a%b,x,y);
lint tx,ty;tx=y;ty=x-a/b*y;
x=tx;y=ty;
return d;
} inline lint mul_mod(lint a,lint b,lint p)
{
lint res=a%p*b%p;res=(res%p+p)%p;return res;
} inline lint pow_mod(lint a,lint b,lint p)
{
lint res=1;
for(;b;b>>=1,a=(a*a)%p)if(b&1)res=(res*a)%p;
return res;
} inline lint inv(lint a,lint p)
{
return mul_mod(pow_mod(a,p-2,p),1,p);
} inline lint BSGS(lint a,lint b,lint p)
{
a%=p;x.clear();
if(a==0&&b==0)return 1;
if(a==0)return -1;
lint m=ceil(sqrt(p)),t=1;
x[1]=m+1;
for(register lint i=1;i<m;i++)
{
t=mul_mod(t,a,p);
if(!x[t])x[t]=i;
}
lint tmp=pow_mod(a,p-1-m,p),inv=1;
for(register lint k=0;k<m;k++)
{
lint i=x[b*inv%p];
if(i)
{
if(i==m+1)i=0;
return k*m+i;
}
inv=mul_mod(inv,tmp,p);
}
return -1;
} inline lint solve(lint p,lint a,lint b,lint x,lint t)
{
if(x%p==t%p)return 1;
if(a==0)
{
if(b%p==t%p)return 2;//before this is return 1; T_T
return -1;
}
if(a==1)
{
lint k,l,c,tmp;c=((t-x)%p+p)%p;
tmp=gcd(b,p);
if(c%tmp)return -1;
c/=tmp;
exgcd(b,p,k,l);
k=k*c%p;
k=(k%p+p)%p;
return k+1;
}
lint q=(x*a%p-x+b)%p;q=(q+p)%p;
if(gcd(q,p)!=1)return -1;
lint tmp=((a-1)*t+b)%p*inv(q,p);tmp=mul_mod(tmp,1,p);
lint res=BSGS(a,tmp,p);
if(res==-1)return -1;
return ((res%p)+p)%p+1;
} int main()
{
lint t=read();
while(t--)
{
lint p,a,b,x,T;
p=read();a=read();b=read();x=read();T=read();
printf("%lld\n",solve(p,a,b,x,T));
}
return 0;
}

[日常摸鱼]bzoj3122 [Sdoi]2013 随机数生成器的更多相关文章

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

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

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

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

  3. [日常摸鱼]bzoj2875[NOI2012]随机数生成器-矩阵快速幂

    好裸的矩阵快速幂-然而我一开始居然构造不出矩阵- 平常两个的情况都是拿相邻两项放在矩阵里拿去递推的-然后我就一直构造不出来-其实把矩阵下面弄成1就好了啊orz #include<cstdio&g ...

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

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

  5. [日常摸鱼]bzoj3224普通平衡树-Treap、Splay、01Trie、替罪羊树…

    http://www.lydsy.com/JudgeOnline/problem.php?id=3224 经典的平衡树模板题-各种平衡树好像都可以(黄学长之前好像还用vector卡过了这题) 所以这篇 ...

  6. Hash 日常摸鱼笔记

    本篇文章是Hash在信息学竞赛中的应用的学习笔记,分多次更新(已经有很多坑了) 一维递推 首先是Rabin-Karp,对于一个长度为\(m\)的串\(S\) \(f(S)=\sum_{i=1}^{m} ...

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

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

  8. [日常摸鱼]HDU1724 Ellipse-自适应Simpson法

    模板题~ QAQ话说Simpson法的原理我还是不太懂-如果有懂的dalao麻烦告诉我~ 题意:每次给一个椭圆的标准方程,求夹在直线$x=l$和$x=r$之间的面积 Simpson法 (好像有时候也被 ...

  9. [日常摸鱼]bzoj1257余数之和

    题意:输入$k,n$,求$\sum_{i=1}^n k \mod i$ $k \mod i=k-i*\lfloor \frac{k}{i} \rfloor $,$n$个$k$直接求和,后面那个东西像比 ...

随机推荐

  1. Cypress系列(90)- Cypress.Cookies 命令详解以及如何跨测试用例共享 Cookies

    如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html Cypress.Cookies 共有三个 ...

  2. 还不懂Java高并发的,建议看看这篇阿里大佬的总结,写的非常详细

    前言 进程是计算机中程序关于某几何数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位.是操作系统结构的基础 线程可以说是轻量级的进程,是程序执行的最小单位,使用多线程而不用多进程去进行并发程 ...

  3. 巧妙运用Camtasia 旅行Vlog轻松get

    旅行时,除了要欣赏当地的美丽风景.享受当地美食外,当然还要将旅行中的各种小细节记录下来.以前我们可能更多地使用相机拍照,现在呢,越来越多的人采用视频拍摄的方式制作Vlog.这种兼具影像与叙事的视频表现 ...

  4. 顺序结构(C语言基本结构)

    顺序结构 1.基本概念 语句执行的顺序与顺序程序书写的顺序一致 特点 a.程序执行的顺序和语句书写的顺序一致 b.有一个数据入口,一个数据出口 顺序结构与四则运算 顺序结构是C语言的基本结构 程序由上 ...

  5. arthas监控elasticsearch(7.x)

    arthas介绍 arthas是Alibaba推出的java诊断工具 官方文档 准备 准备docker环境 name port centos_arthas 3658:3658 docker run - ...

  6. 从使用传统Web框架到切换到Spring Boot后的总结

    1.前言 其实我接触 Spring Boot 的时间并不长,所以还算一个初学者,这篇文章也算是我对 Spring Boot 学习以及使用过程中的复盘,如果文章出现描述错误或表达不清晰的地方,欢迎大家在 ...

  7. python虚拟环境相关设置备忘

    sudo  pip install virtualenv #安装虚拟环境 sudo pip install virtualenvwrapper #安装虚拟环境管理工具nano ~/.bashrc #修 ...

  8. 分享篇:聊一聊 15.5K 的 FileSaver,是如何工作的?

    聊一聊 15.5K 的 FileSaver,是如何工作的? FileSaver.js 是在客户端保存文件的解决方案,非常适合在客户端上生成文件的 Web 应用程序.它简单易用且兼容大多数浏览器,被作为 ...

  9. 并发编程实战-J.U.C核心包

    J.U.C - AQS java.util.concurrent(J.U.C)大大提高了并发性能,AQS 被认为是 J.U.C 的核心.它核心是利用volatile和一个维护队列. AQS其实就是ja ...

  10. springsecurity实现前后端分离之jwt-资料收集

    https://www.jianshu.com/p/5b9f1f4de88d https://www.jianshu.com/p/725d32ab92f8 https://blog.csdn.net/ ...