题目要求的是:

\[...a(a(a(ax+b)+b)+b)+b...=a^nx+a^{n-1}b+a^{n-2}b+...+b\equiv t(mod\ p)
\]

后面这一大坨看着不舒服,所以考虑把它化掉,这里有两种做法:

做法一:两边同乘a-1

\[(a^{n-1}x)(a-1)+b(a^{n-1}-1)\equiv t(a-1)(mod\ p)
\]

\[a^nx-a^{n-1}x+ba^{n-1}-b \equiv at-t(mod\ p)
\]

\[axa^{n-1}-xa^{a-1}+ba^{n-1} \equiv at-t+b(mod\ p)
\]

\[(ax-x+b)a^{n-1} \equiv at-t+b(mod\ p)
\]

\[a^{n-1}\equiv (at-t+b)inv(ax-x+b)(mod\ p)
\]

注意这个很容易乘爆,记得随时取模

做法二:后面乘上a-1的逆元

\[a^{n-1}x+b(a^{n-1}-1)inv(a-1)\equiv t(mod\ p)
\]

\[a^{n-1}x+b*a^{n-1}*inv(a-1)-b*inv(a-1)\equiv t(mod\ p)
\]

\[a^{n-1}x+b*a^{n-1}*inv(a-1)\equiv t+b*inv(a-1)(mod\ p)
\]

\[a^{n-1}(b*inv(a-1)+x)\equiv t+b*inv(a-1)(mod\ p)
\]

\[a^{n-1}\equiv (t+b*inv(a-1))inv(b*inv(a-1)+x)(mod\ p)
\]

然后用BSGS解即可,记得加一

#include<iostream>
#include<cstdio>
#include<map>
#include<cmath>
using namespace std;
long long T,p,a,b,x,t,y,z;
map<long long,long long>mp;
long long ksm(long long a,long long b)
{
long long r=1ll;
a%=p;
while(b)
{
if(b&1)
r=r*a%p;
a=a*a%p;
b>>=1;
}
return r;
}
int main()
{
scanf("%lld",&T);
while(T--)
{
scanf("%lld%lld%lld%lld%lld",&p,&a,&b,&x,&t);
if(x==t)
{
puts("1");
continue;
}
if(a==0)
{
if(b==t)
puts("2");
else
puts("-1");
continue;
}
if(a==1&&b==0)
{
puts("-1");
continue;
}
if(a==1)
{
long long now=ksm(b,p-2);
printf("%lld\n",(((t-x)%p+p)%p*now%p+p)%p+1);
continue;
}
y=a,z=((a*t%p-t+b)%p*ksm(a*x-x+b,p-2)%p+p)%p;
//y=a,z=((t+b*ksm(a-1,p-2)%p)%p*ksm((x%p+b*ksm(a-1,p-2)%p)%p,p-2))%p;//(a*t-t+b)*ksm(a*x-x+b,p-2);做法二
y%=p;
if(!y&&!z)
{
puts("1");
continue;
}
if(!y)
{
puts("-1");
continue;
}
mp.clear();
long long m=ceil(sqrt(p)),t=1;
mp[1]=m+1;
for(long long i=1;i<m;i++)
{
t=t*y%p;
if(!mp[t])
mp[t]=i;
}
long long tmp=ksm(y,p-m-1),now=1,f=0;
for(long long k=0;k<m;k++)
{
long long i=mp[z*now%p];
if(i)
{
if(i==m+1)
i=0;
printf("%lld\n",k*m+i+1);
f=1;
break;
}
now=now*tmp%p;
}
if(!f)
puts("-1");
}
return 0;
}

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

  1. bzoj 3122 : [Sdoi2013]随机数生成器 BSGS

    BSGS算法 转自:http://blog.csdn.net/clove_unique 问题 给定a,b,p,求最小的非负整数x,满足$a^x≡b(mod \ p)$ 题解 这就是经典的BSGS算法, ...

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

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

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

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

  4. bzoj 3122: [Sdoi2013]随机数生成器

    #include<cstdio> #include<iostream> #include<map> #include<cmath> #define ll ...

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

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

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

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

  7. BZOJ3122: [Sdoi2013]随机数生成器(BSGS)

    题意 题目链接 Sol 这题也比较休闲. 直接把\(X_{i+1} = (aX_i + b) \pmod P\)展开,推到最后会得到这么个玩意儿 \[ a^{i-1} (x_1 + \frac{b}{ ...

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

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

  9. [bzoj3122][SDOI2013]随机数生成器 ——BSGS,数列

    题目大意 给定递推序列: F[i] = a*F[i-1] + b (mod c) 求一个最小的i使得F[i] == t 题解 我们首先要化简这个数列,作为一个学渣,我查阅了一些资料: http://d ...

随机推荐

  1. poj——3118 Arbiter

      Arbiter 题目描述:      “仲裁者”是<星际争霸>科幻系列中的一种太空船.仲裁者级太空船是神族的战船,专门提供精神力支援.不像其他战船的人员主要是战士阶级,仲裁者所承载的都 ...

  2. ORA-01034: ORACLE not available 出错

    调用db.rlogon("sm/sm")出现以下错误 ORA-01034: ORACLE not availableORA-27101: shared memory realm d ...

  3. javascript实现 京东淘宝等商城的商品图片大图预览功能(图片放大器)

      在京东和淘宝等购买东西的时候,我们会经常预览左侧商品展示图片,把鼠标放到原图,右侧就会有个大图显示出细节.本文将带领大家写一个这样简单的功能! 一.实现原理 当鼠标移入某一图片内部时,图片上部会出 ...

  4. 常见machine learning模型实现

    一.感知机模型 二.线性回归(Linear Regression) from numpy import * def loadData(filename): x = [] y = [] f = open ...

  5. Office WORD如何去掉目录的背景灰色

    有人说鼠标点击空白的地方灰色就自动散掉了,但是我点击并没有散掉 鼠标选中有灰色背景的文字,点击格式-边框和底纹,点击无填充颜色,并应用于文字. O了

  6. POJ 1679 The Unique MST 推断最小生成树是否唯一

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22715   Accepted: 8055 D ...

  7. Ubuntu14.04 64bit下Caffe + CUDA 6.5安装详细步骤

    不多说,直接上干货! 笔者花了很长时间才装完,主要是cuda安装和opencv安装比较费劲,cuda找不到32位的安装包只好重装64位的ubuntu系统,opencv 也是尝试了很久才解决,这里建议用 ...

  8. 请说出作用域public,private,protected,以及不写时的区别

    这四个作用域的可见范围如下表所示. 说明:如果在修饰的元素上面没有写任何访问修饰符,则表示friendly. 作用域    当前类 同一package 子孙类 其他package public    ...

  9. 20170111 ABAP技术小结(全半角转换)

    DATA: it_po LIKE it_alv OCCURS 0 WITH HEADER LINE.************************************************** ...

  10. forword 与 redirect

    直接转发方式(Forward) 客户端和浏览器只发出一次请求,Servlet.HTML.JSP或其它信息资源,由第二个信息资源响应该请求,在请求对象request中,保存的对象对于每个信息资源是共享的 ...