http://www.lydsy.com/JudgeOnline/problem.php?id=3122

等比数列求和公式+BSGS

#include<map>
#include<cmath>
#include<cstdio>
#include<iostream> using namespace std; int p,a,b,x1,t; map<int,int>mp; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} int Pow(int x,int y)
{
int r=;
for(;y;x=1LL*x*x%p,y>>=)
if(y&) r=1LL*r*x%p;
return r;
} void force()
{
int ans=-;
int last=x1,now;
for(int i=;i<=p;++i)
{
now=(1LL*a*last+b)%p;
if(now==t)
{
ans=i;
break;
}
last=now;
}
printf("%d\n",ans);
} void A1()
{
if(!b) printf("-1\n");
else printf("%d\n",int((1LL*(t-x1+p)%p*Pow(b,p-)%p+)%p));
} void BSGS()
{
if(!a)
{
if(t==x1) printf("1\n");
else if(t==b) printf("2\n");
else printf("-1\n");
return;
}
int ans=-;
mp.clear();
int B=1LL*t*Pow(x1,p-)%p;
int m=ceil(1.0*sqrt(1.0*p));
int mul=B;
mp[B]=;
for(int i=;i<m;++i)
{
mul=1LL*mul*a%p;
mp[mul]=i;
}
mul=;
int am=Pow(a,m);
for(int i=;i<=m;++i)
{
mul=1LL*mul*am%p;
if(mp.find(mul)!=mp.end())
{
ans=i*m-mp[mul];
break;
}
}
if(ans!=-) ans++;
printf("%d\n",ans);
} void bsgs()
{
if(!a)
{
if(t==x1) printf("1\n");
else if(t==b) printf("2\n");
else printf("-1\n");
return;
}
int ans=-;
mp.clear();
int tmp=1LL*b*Pow(a-,p-)%p;
int B=1LL*(t+tmp)*Pow(x1+tmp,p-)%p;
int m=ceil(1.0*sqrt(1.0*p));
int mul=B;
mp[B]=;
for(int i=;i<m;++i)
{
mul=1LL*mul*a%p;
mp[mul]=i;
}
mul=;
int am=Pow(a,m);
for(int i=;i<=m;++i)
{
mul=1LL*mul*am%p;
if(mp.find(mul)!=mp.end())
{
ans=i*m-mp[mul];
break;
}
}
if(ans!=-) ans++;
printf("%d\n",ans);
} int main()
{
//freopen("random.in","r",stdin);
//freopen("random.out","w",stdout);
int T;
read(T);
while(T--)
{
read(p); read(a); read(b); read(x1); read(t);
if(x1==t)
{
printf("1\n");
continue;
}
if(p<=) force();
else if(a==) A1();
else if(!b) BSGS();
else bsgs();
}
}

bzoj千题计划259:bzoj3122: [Sdoi2013]随机数生成器的更多相关文章

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

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

  2. bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块

    http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...

  3. bzoj千题计划267:bzoj3129: [Sdoi2013]方程

    http://www.lydsy.com/JudgeOnline/problem.php?id=3129 如果没有Ai的限制,就是隔板法,C(m-1,n-1) >=Ai 的限制:m减去Ai &l ...

  4. bzoj千题计划134:bzoj3124: [Sdoi2013]直径

    http://www.lydsy.com/JudgeOnline/problem.php?id=3124 第一问: dfs1.dfs2 dfs2中记录dis[i]表示点i距离最长链左端点的距离 第二问 ...

  5. bzoj千题计划133:bzoj3130: [Sdoi2013]费用流

    http://www.lydsy.com/JudgeOnline/problem.php?id=3130 第一问就是个最大流 第二问: Bob希望总费用尽量大,那肯定是把所有的花费加到流量最大的那一条 ...

  6. bzoj千题计划268:bzoj3131: [Sdoi2013]淘金

    http://www.lydsy.com/JudgeOnline/problem.php?id=3131 如果已知 s[i]=j 表示有j个<=n数的数码乘积=i 那么就会有 s[a1]*s[a ...

  7. bzoj千题计划258:bzoj3123: [Sdoi2013]森林

    http://www.lydsy.com/JudgeOnline/problem.php?id=3123 启发式合并主席树 #include<cmath> #include<cstd ...

  8. bzoj千题计划196:bzoj4826: [Hnoi2017]影魔

    http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...

  9. bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪

    http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...

随机推荐

  1. 设计模式 笔记 状态模式 State

    //---------------------------15/04/28---------------------------- //State  状态模式----对象行为型模式 /* 1:意图: ...

  2. JQ_开发经验

    1. 把你的代码全部放在闭包里面 这是我用的最多的一条.但是有时候在闭包外面的方法会不能调用.不过你的插件的代码只为你自己的插件服务,所以不存在这个问题,你可以把所有的代码都放在闭包里面.而方法可能应 ...

  3. Docker部署Registry私有镜像库

    拉取镜像 docker pull registry:2.6.2   生成账号密码文件,这里采用htpasswd方式认证 docker run --rm --entrypoint htpasswd re ...

  4. 部署jar项目常用命令

      netstat -tunlp | grep  ××   查询出端口为××在运行应用的线程ip   kill -9  ××     关闭线程ip 为 ××的应用   rm  -f  ××.jar  ...

  5. 3Sum(or k_Sum)

    Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find ...

  6. Navicat连接Mysql8.0失败:Client does not support authentication protocol requested by server...

    今天Mysql服务无法启动,看着网上的教程稀里糊涂的就用命令mysqld --initialize给初始化了,结果就是以前的表都没了,重新安装后,Navicat无法连接数据库 解决方法如下: 意思是直 ...

  7. SQLServer2008只能编辑前面200行数据

    设置编辑所有行:操作步骤:打开数据库-〉工具-〉选项-〉sqlserver对象资源管理器-〉命令 把200改为0,即可编辑所有行了

  8. 基于Air800+Arduino+ESP8266的混合物联网开发

    流程图如下:

  9. node模块加载机制。

  10. Python进阶-配置文件

    一. 什么是配置文件?为什么要做配置文件? 将所有的代码和配置都变成模块化可配置化,这样就提高了代码的重用性,不再每次都去修改代码内部,这个就是我们逐步要做的事情,可配置化 二. 配置文件长啥样? 配 ...