思路:\(BSGS\)

提交:\(1\)次

题解:

原式可以化为$$x_{i+1}+\frac{b}{a-1}=a(x_{i}+\frac{b}{a-1})\mod p$$

这不是等比数列吗?

\[x_{n}+\frac{b}{a-1}=a^{n-1}\cdot (x_{1}+\frac{b}{a-1})\mod p
\]

所以有

\[a^{n-1}=(x_{1}+\frac{b}{a-1})^{-1}\cdot (x_{n}+\frac{b}{a-1})\mod p
\]

这样我们可以\(BSGS\)

注意特判\(a=1,0\)的情况

#include<cstdio>
#include<iostream>
#include<unordered_map>
#include<cmath>
#define ll long long
#define R register int
using namespace std;
namespace Luitaryi {
template<class I> inline I g(I& x) { x=0; register I f=1;
register char ch; while(!isdigit(ch=getchar())) f=ch=='-'?-1:f;
do x=x*10+(ch^48); while(isdigit(ch=getchar())); return x*=f;
}
int T,p,a,b,x1,xn;
inline ll qpow(ll a,ll b) { register ll ret=1;
for(;b;b>>=1,(a*=a)%=p) if(b&1) (ret*=a)%=p; return ret;
}
inline int BSGS() {
unordered_map<int,int> hsh; hsh.clear();
R t=sqrt(p)+1; R c=(xn+1ll*b*qpow(a-1,p-2))%p*qpow((x1+1ll*b*qpow(a-1,p-2))%p,p-2)%p;
for(R i=1;i<=t;++i) {
R vl=1ll*c*qpow(a,i)%p;
hsh[vl]=i;
} a=qpow(a,t);
if(a==0) return c==0?1:-2;
for(R i=1;i<=t;++i) {
R vl=qpow(a,i);
if(hsh.count(vl)&&i*t-hsh[vl]>=0) return i*t-hsh[vl];
} return -2;
}
inline void main() {
g(T); while(T--) {
g(p),g(a),g(b),g(x1),g(xn);
if(x1==xn) {puts("1"); continue;}
if(a==0) {if(xn==b) puts("2"); else puts("-1"); continue;}
if(a==1&&b==0) {puts("-1"); continue;}
if(a==1) {
printf("%d\n",1ll*((xn-x1)%p+p)%p*qpow(b,p-2)%p+1);
continue;
} printf("%d\n",BSGS()+1);
}
}
} signed main() {Luitaryi::main(); return 0;}

2019.08.24

76

最新文章

  1. Foreach 原理
  2. .net(C#)在vs2010版本下的MVC如何配置才能切换静态页面(html)
  3. php 快速排序
  4. Crumpet – 使用很简单的响应式前端开发框架
  5. themepark模板中奇特的编码
  6. OWASP WEB会话管理备忘单 阅读笔记
  7. java作业7
  8. sklearn基础知识-准备阶段
  9. svn中的图标解释
  10. 理解C#系列 / C#语言的特性
  11. Java笔记(十一)&hellip;&hellip;单例设计模式
  12. Tui-x简单介绍
  13. react中文API解读二(教程)
  14. /etc/rc.local 与 /etc/init.d Linux 开机自动运行程序
  15. Python的文件及异常
  16. 在虚拟机中搭建qduoj(一)——准备工作
  17. Optimizing Hive queries for ORC formatted tables
  18. 【转】FFmpeg 基本用法
  19. 将eclipse的maven项目导入到intellij idea中
  20. Linux下MySQL5.7.18二进制包安装(无默认配置文件my_default.cnf)

热门文章

  1. Django中常用的那些模块路径
  2. TIM—基本定时器代码
  3. SSH框架CRUD+树形菜单案例
  4. css 水平垂直居中 &amp; vertical-align
  5. vue + element-ui 国际化实现
  6. babel-plugin-transform-remove-strict-mode
  7. python3爬虫之requests库基本使用
  8. C++ 容器一图以蔽之
  9. 【vue开发】vue指令Vue.directive使用教程
  10. Java流对象:InputStream、OutputStream、Reader、Writer