Description

Input

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

注意:P一定为质数

Output

共T行,每行一个整数表示他最早读到第t页是哪一天。如果他永远不会读到第t页,输出-1。

Sample Input

3
7 1 1 3 3
7 2 2 2 0
7 2 2 2 1

Sample Output

1
3
-1

HINT

0<=a<=P-1,0<=b<=P-1,2<=P<=10^9

【思路】

逆元,BSGS算法

首先特判:a=0,a=1,当a=1时,序列为:

x1,x1+b,x1+2*b

即(x1+(n-1)*b) mod p=t,用个乘法逆元可以求出,当逆元为0的时候无解输出-1。

当a>=2时

可以得到通项公式:

xn=[
a^n-1 *(x1+b/(a-1))-b/(a-1) ] mod p

若满足xn=t,则有

a^n-1 = (b* (a-1)^-1 +t) * (b*(a-1)^-1+x1)^-1
mod p

于是可以用BSGS算法求n-1。

需要注意的是各种取模p一定要有。

【代码】

 #include<map>
#include<cmath>
#include<cstdio>
#include<iostream>
using namespace std; typedef long long LL;
const int N = 1e4+; LL pow(LL x,LL p,LL MOD) {
LL ans=;
while(p) {
if(p&) ans=(ans*x)%MOD;
x=(x*x)%MOD;
p>>=;
}
return ans;
}
map<LL,int> mp;
LL BSGS(LL a,LL b,LL MOD) {
a%=MOD;
int m=sqrt(MOD)+; mp.clear();
LL am=pow(pow(a,m,MOD),MOD-,MOD);
LL x=; mp[]=;
for(int i=;i<m;i++) {
x=(x*a)%MOD;
if(!mp.count(x)) mp[x]=i;
}
for(int i=;i<m;i++) {
if(mp.count(b)) return i*m+mp[b];
b=(b*am)%MOD;
}
return -;
} LL p,a,b,x1,t; int main() {
//freopen("in.in","r",stdin);
//freopen("out.out","w",stdout);
int T;
scanf("%d",&T);
while(T--) {
cin>>p>>a>>b>>x1>>t;
LL c=pow(a-,p-,p),d,x,y,con,inv;
if(x1==t) puts(""); else
if(!a) {
if(t==b) puts("");
else puts("-1");
} else
if(a==) {
inv=pow(b,p-,p);
if(!inv) puts("-1");
else printf("%lld\n",((inv*(t-x1+p)%p)+p)%p+);
} else {
con=((((b*c+t)%p)*(pow((x1+b*c)%p,p-,p)))%p+p)%p;
printf("%lld\n",BSGS(a,con,p)+);
}
}
return ;
}

bzoj 3122 [Sdoi2013]随机数生成器(逆元,BSGS)的更多相关文章

  1. 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) \] 后面这一大坨看着不舒服,所以考 ...

  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+exgcd)

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

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

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

  5. 【bzoj3122】: [Sdoi2013]随机数生成器 数论-BSGS

    [bzoj3122]: [Sdoi2013]随机数生成器 当a>=2 化简得 然后 BSGS 求解 其他的特判 : 当 x=t  n=1 当 a=1  当 a=0 判断b==t /* http: ...

  6. 【洛谷 P3306】[SDOI2013]随机数生成器 (BSGS)

    题目链接 怎么这么多随机数生成器 题意见原题. 很容易想到\(BSGS\)算法,但是递推式是\(X_{i+1}=(aX_i+b)\mod p\),这显然不是一个等比数列. 但是可以用矩阵乘法来求出第\ ...

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

    #include<cstdio> #include<cstring> #include<cmath> #include<iostream> #inclu ...

  8. 洛谷P3306 [SDOI2013]随机数生成器(BSGS)

    传送门 感觉我BSGS都白学了……数学渣渣好像没有一道数学题能自己想出来…… 要求$X_{i+1}=aX_i+b\ (mod \ \ p)$ 左右同时加上$\frac{b}{a-1}$,把它变成等比数 ...

  9. BZOJ3122 [Sdoi2013]随机数生成器 【BSGS】

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

随机推荐

  1. Spring aop与HibernateTemplate——session管理(每事务一次 Session)

    一.HibernateTemplate与Spring aop简介 参见http://bbs.csdn.net/topics/340207475中网友blueram的发言.(感谢blueram) 二.在 ...

  2. OpenSSL重大漏洞-Heartbleed之漏洞利用脚本POC讲解

    OpenSSL Security Advisory [07 Apr 2014] ======================================== TLS heartbeat read ...

  3. Docker 监控实战

    如今,越来越多的公司开始使用 Docker 了,现在来给大家看几组数据: 2 / 3 的公司在尝试了 Docker 后最终使用了它 也就是说 Docker 的转化率达到了 67%,而转化市场也控制在 ...

  4. 关于static继承的问题

    c++primer 15.2.7节关于static继承的意思是,父类和子类共享static函数或者static成员变量,并且子类要访问还要受它们的权限限制,下面是看到的另一个例子 class Base ...

  5. MyBatis的动态SQL操作--删除

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUYAAAC/CAIAAAANX+LCAAAYvElEQVR4nO2dWWycV9nHDyC6UEGBGy

  6. 关于rewriteRule的一个小问题

    RewriteEngine on # RewriteRule ^test.php$ modrewrite.php# RewriteRule ^(.*) http://www.baidu.com [L] ...

  7. Android-xUtils框架介绍(三)

    继续介绍xUtils的最后两个模块:DbUtils和HttpUtils.首先先介绍第一个SQLite数据库操纵的简单ORM框架,只要能理解xUtils为我们提供的api,相信你也能熟练的把DbUtil ...

  8. .woff 文件404,配置到web.config

    <staticContent>        <remove fileExtension=".woff" />        <mimeMap fil ...

  9. 职责链实现的apache.chain使用

    其实职责链在老早就使用过了,以前在HW给Vodafone做金融项目的时候,使用职责链完成交易步骤,那时觉得这东西真好用,可以直接通过配置决定业务流程,现在终于有机会实践一下.       项目地址:h ...

  10. 解锁windowsphone设备遇到的错误:检查Miscrosoft账户凭据、请重新注册 0x80004005 解决方案

    本篇文章主要讲在解锁windowsphone设备时遇到的错误 Error1:登录windowsphone开发人员中心时出错,请检查您的miscrosoft账户凭据 Error2:注册您的手机时出现未知 ...