#include<cstdio>
#include<iostream>
#include<map>
#include<cmath>
#define ll long long
using namespace std;
ll T,p,a,b,c,x1,t;
map<ll,ll> mp;
ll exgcd(ll b,ll p,ll &x,ll &y)
{
if(!p)
{
x=;
y=;
return b;
}
ll t1=exgcd(p,b%p,x,y);
ll t=x;
x=y;
y=t-b/p*y;
return t1;
}
ll kuai(ll a,ll k,ll p)
{
ll ans=;
for(;k;)
{
if(k%)
ans=(ans*a)%p;
k/=;
a=(a*a)%p;
}
return ans;
}
ll pan(ll y,ll z,ll p)
{
mp.clear();
ll m=ceil(sqrt(p)),t=;
mp[]=m+;
for(ll i=;i<m;i++)
{
t=t*y%p;
mp[t]=i;
}
ll T=kuai(y,p-m-,p),ine=;
for(ll k=;k<=m;k++)
{
ll i=mp[z*ine%p];
if(i)
{
if(i==m+)
i=;
return k*m+i+;
}
ine=ine*T%p;
}
return -;
}
ll solve()
{
if(x1==t)
return ;
if(a==)
{
if(b==t)
return ;
return -;
}
if(a==)
{
c=(t-x1+p)%p;
ll x,y;
ll t1=exgcd(b,p,x,y);
if(c%t1)
return -;
c/=t1;
x=x*c%p;
for(;x<;x+=p);
return x+;
}
if(a>)
{
c=kuai(a-,p-,p);
ll x,y,d=(b*c+t)%p;
ll t1=exgcd((x1+b*c)%p,p,x,y);
if(d%t1)
return -;
d/=t1;
x=x*d%p;
for(;x<;x+=p);
a%=p;
x%=p;
if(!a&&!x)
return ;
if(!a)
return -;
return pan(a,x,p);
}
}
int main()
{
scanf("%lld",&T);
for(int i=;i<=T;i++)
{
scanf("%lld%lld%lld%lld%lld",&p,&a,&b,&x1,&t);
printf("%lld\n",solve());
}
return ;
}

当 a==0时,判断b,当a==1时,exgcd否则BSGS

bzoj 3122: [Sdoi2013]随机数生成器的更多相关文章

  1. bzoj 3122 [Sdoi2013]随机数生成器(逆元,BSGS)

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

  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】

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

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

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

  5. BZOJ 3122 SDOI2013 随机数发生器 数论 EXBSGS

    标题效果:给定一列数X(i+1)=(a*Xi+b)%p 最低要求i>0.所以Xi=t 0.0 这个问题可以1A那很棒 首先讨论特殊情况 如果X1=t ans=1 如果a=0 ans=b==t? ...

  6. 【BZOJ 3122】 [Sdoi2013]随机数生成器 (BSGS)

    3122: [Sdoi2013]随机数生成器 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1442  Solved: 552 Description ...

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

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

  8. 洛咕 P3306 [SDOI2013]随机数生成器

    洛咕 P3306 [SDOI2013]随机数生成器 大力推式子??? \(X_{i}=\underbrace{a(a(\cdots(a(a}_{i-1个a}X_1+b)))\cdots)\) \(=b ...

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

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

随机推荐

  1. java mybatis 动态sql

    //-------------------------------查询-------------------------------------// <sql id="cmsGuest ...

  2. android 多点

    引用:http://blog.163.com/fenglang_2006/blog/static/13366231820108205274325/ 第一章摘要 在Linux内核支持的基础上,Andro ...

  3. 10. 星际争霸之php设计模式--原型模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  4. 在linux中访问virtualbox的共享文件夹

    1.在客户机里需要安装Virtualbox的增强功能. 2.使用virtualbox的图形界面设置好共享文件夹. 3.假设你设置的共享文件夹的名称是 share,使用如下命令在客户机的linux系统中 ...

  5. .Net程序员安卓学习之路4:使用xutils Get Post数据

    前面使用了一些网络上找来的类进行网络访问,后来发现了安卓开发中有一个国人写的类库xutils比较全面,也比较经典,故后续使用xutils类库进行记录. 本例服务端使用WCF来实现,写好的WCF服务端在 ...

  6. notepad++代码自动补全功能

    可以代码自动补全功能,默认他是没有开启这个功能的,在首选项->备份与自动完成 里面有自动完成这一个设置,可以设置单词补全,也可以设置函数补全,这样写代码就快多了

  7. IOS调试lldb命令常用,po,

    lldb命令常用(备忘) 假如你准备在模拟器里面运行这个,你可以在"(lldb)"提示的后面输入下面的: (lldb) po $eax LLDB在xcode4.3或者之后的版本里面 ...

  8. Orcale与jfinal的添加时间问题

    时间只能不能使用一般的方法进行添加,必须转换,比如添加当前时间,如上图所示

  9. 预编译命令 #if DEBUG

    在控制台程序根据预编译命令: http://www.askapache.com/windows/advanced-batch-scripting.html namespace SXGYCarTrans ...

  10. php数组插入数据库这个功能该怎么实现

    原文网址:https://segmentfault.com/q/1010000004048449 比如一个数组$a=array("a"=>"1",&quo ...