题目要求的是:

\[...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. centos7 网络设置

    1.显示所有连接的网络接口 ip link show 2.激活或禁止网络接口 sudo ip link set up/down {dev} 3.将一个或多个IPv4地址分配给网络接口$ sudo ip ...

  2. 51nod 马拉松30 C(构二分图+状压dp)

    题意 分析 考虑一个图能被若干简单环覆盖,那么一定是每个点恰好一个出度,恰好一个出度 于是类似最小路径覆盖的处理,我们可以把每个点拆成2个点i和i',如果有一条边(i,j),那么将i和j'连起来 那么 ...

  3. 2017CodeM复赛

    A.配对游戏(loj6191) 题目: https://loj.ac/problem/6191 分析: g[i][j]表示前i个位置尽可能合并,合并到最后右边剩下j个>,这样情况的概率 那么g[ ...

  4. Spring + RMI

    服务端: RmiServer.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns= ...

  5. 北京交大yum

    [base] name=CentOS-$releasever - Base #mirrorlist=http://mirrorlist.centos.org/?release=$releasever& ...

  6. 基于gulp编写的一个简单实用的前端开发环境

    自从Node.js出现以来,基于其的前端开发的工具框架也越来越多了,从Grunt到Gulp再到现在很火的WebPack,所有的这些新的东西的出现都极大的解放了我们在前端领域的开发,作为一个在前端领域里 ...

  7. Meteor事件

    使用事件是非常简单的.我们将学习如何使用tag,class 和id作为事件选择器. 让我们创建HTML模板三大要素.第一个是 p 标签,第二个是 myClass 类,最后一个是myId. meteor ...

  8. storm的例子,一个非常好的网址

    https://insight.io/github.com/apache/storm/tree/HEAD/examples/storm-elasticsearch-examples/src/main/ ...

  9. CentOS 6.x Radius

    CentOS 6.x Radius 一.   实现环境: 1.系统:CentOS  release  6.6 (Final) 2.需要软件包: 1) freeradius-2.1.12-6.e16.x ...

  10. Linux 的 Socket IO 模型

    前言 之前有看到用很幽默的方式讲解Windows的socket IO模型,借用这个故事,讲解下linux的socket IO模型: 老陈有一个在外地工作的女儿,不能经常回来,老陈和她通过信件联系. 他 ...