#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. nodejs框架express准备登录

    目录: 安装模板 静态资源 添加视图 渲染视图 url重定向 模板引擎 从本节课程开始我们要使用express框架实现一个简单的用户登陆功能,让我们先准备一下相关资源. 在nodejs中使用expre ...

  2. Unable to create SVNRepository object

    I think you are missing at least the library setup stuff:     /*      * Initializes the library to w ...

  3. java中BigDecimal加减乘除基本用法

    Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数. 在实际应用中,需要对更大或者更小的数进 ...

  4. C#对多个集合和数组的操作(合并,去重,判断)

    在开发过程中.数组和集合的处理是最让我们担心.一般会用for or foreach 来处理一些操作.这里介绍一些常用的集合跟数组的操作函数.  首先举例2个集合A,B. List<int> ...

  5. 点击checkbox,触发事件

    时间选择: 起始时间:<input type="text" value="2016-03-21 12:24:10" id="starttime& ...

  6. jquery easyui 解析数据库返回的数据

  7. AsyncTask的缺陷和注意事项

    1. AsyncTask 主要是用来处理后台耗时操作,并将数据更新到主线程的一个工具类. AsyncTask的执行分为四个步骤,每一步都对应一个回调方法,这些方法不应该由应用程序调用,开发者需要做的就 ...

  8. 简单练习题2编写Java应用程序。首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能

    编写Java应用程序.首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”.“取款”和“余额查询”.其次, 编写一个主类,在主类中测试Account类的 ...

  9. LabVIEW串口通信

    Instrument I/O 利用LabVIEW内置的驱动程序库和具有工业标准的设备驱动软件,可对 GPIB(通用接口总线).Ethernet(以太网)接口.RS-232(标准串行接口总线)/RS-4 ...

  10. 正则表达式获取TABLE里的内容

    //过滤\n 转换成空            String withoutNString=message.Replace("\n", "");          ...