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

Source

Solution:多种情况a=0:。。。

          a=1:EXGCD

          a=2:一些神奇的化简什么的,可以化简到使用BSGS的地步,贴上YveH大爷的blog

          注意各种特判。

 #include <iostream>
#include <cstdio>
#include <cmath>
#include <map>
#define ll long long
using namespace std;
ll a,b,p,x1,t;
ll fast_pow(ll x,ll y,ll q)
{
ll ans=;
while (y)
{
if (y&) ans=ans*x%p;
x=x*x%p;
y>>=;
}
return ans;
} ll ex_gcd(ll a,ll b,ll &x1,ll &y1)
{
if (b==) {x1=;y1=;return a;}
ll ans=ex_gcd(b,a%b,x1,y1);
ll temp=x1; x1=y1; y1=temp-a/b*y1;
return ans;
} ll bsgs(ll A,ll n,ll q)
{
A%=q; n%=q;
if (!A && !n) return ;
if (!A) return -;
map<ll,ll> mp;
ll m=ceil(sqrt(q));
ll temp=fast_pow(A,m,q),k=n%q;
mp.clear();
for (int i=;i<=m;i++)
{
k=k*A%q;
if (!mp[k]) mp[k]=i;
}
k=;
for (int i=;i<=m;i++)
{
k=k*temp%q;
if (mp[k])
{
if (mp[k]==-) mp[k]=;
return m*i-mp[k];
}
}
return -;
} ll solve1()
{
ll C=(t-x1+p)%p,x,y;
ll d=ex_gcd(b,p,x,y);
if (C%d) return -;
x=x*C/d%p;
while (x<) x+=p;
return x+;
} ll solve2()
{
ll c=fast_pow(a-,p-,p)%p,B=(x1+b*c)%p,C=(b*c+t)%p,x,y;
ll d=ex_gcd(B,p,x,y);
if (C%d) return -;
while (x<) x+=p;
ll temp=bsgs(a,x*C/d%p,p);
if (temp!=-) return temp+;
else return -;
} int main()
{
int T;
scanf("%d",&T);
while (T--)
{
scanf("%lld%lld%lld%lld%lld",&p,&a,&b,&x1,&t);
if (x1==t) puts("");
else if (a==) if (b==t) puts("");
else puts("-1");
else if (a==) printf("%lld\n",solve1());
else if (a>=) printf("%lld\n",solve2());
}
}

【BZOJ3122】【SDoi2013】随机数生成器的更多相关文章

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

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

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

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

  3. bzoj千题计划259:bzoj3122: [Sdoi2013]随机数生成器

    http://www.lydsy.com/JudgeOnline/problem.php?id=3122 等比数列求和公式+BSGS #include<map> #include<c ...

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

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

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

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

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

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

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

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

  8. 【BZOJ-3122】随机数生成器 BSGS

    3122: [Sdoi2013]随机数生成器 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1362  Solved: 531[Submit][Sta ...

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

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

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

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

随机推荐

  1. ytu 1058: 三角形面积(带参的宏 练习)

    1058: 三角形面积 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 190  Solved: 128[Submit][Status][Web Boar ...

  2. HTML - DOCTYPE

    HTML - DOCTYPE HTML 5 doctype <!DOCTYPE html> HTML4.01 Based on SGML. so the browser need the ...

  3. WPF ListView展示层叠信息

    通常我们在ListView中展示一列同类数据,例如城市名称.不过可以对ListView的DataTemplate稍作修改,让其显示层叠信息.例如:需要在ListView中显示省份和省份对应的城市名称. ...

  4. hdu 4044 2011北京赛区网络赛E 树形dp ****

    专题训练 #include<stdio.h> #include<iostream> #include<string.h> #include<algorithm ...

  5. linux 操作mysql

    MySQL删除数据库时的错误 ERROR 1010 (HY000): Error dropping database (can't rmdir './myapp', errno: 39)的错误信息. ...

  6. How to use Ajax on Visualforce page on Salesforce platform

    Just use Ajax pattern to call object data from server on visualforce page. Following is the Asynchro ...

  7. Linux学习笔记(1)Linux虚拟机安装过程中的知识点及常用管理工具

    1. VMware的相关知识 (1)建议的VMware的配置: CPU 主频1GHz以上 内存 1GB以上 硬盘 分区空闲空间8GB以上 (2)VMware创建快照 快照的作用是保存虚拟机的现有状态, ...

  8. SQLServer 维护脚本分享(08)临时数据库(tempdb)

    dbcc sqlperf(logspace) --各数据库日志大小及使用百分比 dbcc loginfo --查看当前数据库的虚拟日志文件 --临时表'Tempdb'最近使用情况 SELECT t1. ...

  9. Hbase系统架构

    HBase 系统架构 HBase是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.HBase的目标是存储并处理大型的数据.HBase是一个开源的,分布式的,多版本的,面向列 ...

  10. Eclipse如何替换android应用图标

    打开你的项目 我们看到项目里有 res这个文件夹里有以下文件夹. drawable-hdpi     -------高分辨率 drawable-ldpi      -------中分辨率 drawab ...