题目

输入格式

输入含有多组数据,第一行一个正整数T,表示这个测试点内的数据组数。

接下来T行,每行有五个整数p,a,b,X1,t,表示一组数据。保证X1和t都是合法的页码。

注意:P一定为质数

输出格式

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

输入样例

3

7 1 1 3 3

7 2 2 2 0

7 2 2 2 1

输出样例

1

3

-1

提示

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

题解

运用数列的知识可以将式子化简为一个等比数列
然后就可以用BSGS求解

但是要分很多特殊情况讨论 = =
例如\(a = 0,a = 1,X1 = t\)之类的

还有,,
BSGS时,开根要向上取整,保证查找真的完全了

数学真差

#include<iostream>
#include<cstdio>
#include<cmath>
#include<map>
#include<cstring>
#include<algorithm>
#define LL long long int
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define BUG(s,n) for (int i = 1; i <= (n); i++) cout<<s[i]<<' '; puts("");
using namespace std;
const int maxn = 100005,maxm = 100005,INF = 1000000000;
inline int read(){int out = 0,flag = 1; char c = getchar();while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}return out * flag;
}
LL P;
map<LL,LL> mp;
LL qpow(LL a,LL b){LL ans = 1;for (; b; b >>= 1,a = a * a % P)if (b & 1) ans = ans * a % P;return ans % P;
}
LL inv(LL a){return qpow(a,P - 2);
}
void solve1(LL A,LL B,LL X,LL T){LL ans = ((T - X) % P * inv(B) % P + P) % P;printf("%lld\n",ans + 1);
}
LL BSGS(LL a,LL b){mp.clear();if (a % P == 0) return -2;LL m = (LL)ceil(sqrt(P)),ans;for (int i = 0; i <= m; i++){if (i == 0){ans = b % P;mp[ans] = i;}else {ans = ans * a % P;mp[ans] = i;}}LL t = qpow(a,m); ans = t;for (int i = 1; i <= m; i++){if (i != 1) ans = ans * t % P;if (mp.count(ans)){ans = ((i * m - mp[ans]) % P + P) % P;return ans;}}return -2;
}
void solve2(LL A,LL B,LL X,LL T){LL tmp = B * inv(A - 1) % P;LL a = A,b = (T + tmp) % P * inv(X + tmp) % P;printf("%lld\n",BSGS(a,b) + 1);
}
int main(){int T = read(),a,b,X1,t;while (T--){P = read(),a = read(),b = read(),X1 = read(),t = read();if (X1 == t) puts("1");else if (a == 0){if (t == b) puts("2");else puts("-1");}else if (a == 1){if (b == 0) puts("-1");else solve1(a,b,X1,t);}else solve2(a,b,X1,t);}return 0;
}

转载于:https://www.cnblogs.com/Mychael/p/8601761.html

BZOJ3122 [Sdoi2013]随机数生成器 【BSGS】相关推荐

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

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

  2. bzoj3122 [Sdoi2013]随机数生成器(bsgs+扩欧+数列)

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

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

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

  4. luogu P3306 [SDOI2013] 随机数生成器(BSGS,数列求通项,毒瘤特判)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 发个水题的 题解证明我还在() luogu P3306 [SDOI2013] 随机数生成器 Webli ...

  5. 【bzoj3122】 Sdoi2013—随机数生成器

    http://www.lydsy.com/JudgeOnline/problem.php?id=3122 (题目链接) 题意 对于一个数列${X_i}$,其递推式为:${X_{i+1}=(a*X_i+ ...

  6. 牛客——[SDOI2013]随机数生成器(推公式+BSGS)

    链接:https://ac.nowcoder.com/acm/problem/20362 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  7. 数论练习二之BSGS算法——随机数生成器,Matrix,Lunar New Year and a Recursive Sequence,Fermat‘s Last Theorem

    [SDOI2013] 随机数生成器 description solution 肯定是非常想找一个通项公式来表示第nnn个数的 依据形式,考虑化成等比数列 xi+1+k=a(xi+k)=a⋅xi+b+t ...

  8. Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom

    Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom 文中的 Random即:java.util.Random, ThreadLocalRandom 即 ...

  9. 开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器

    原文:[原创]开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器                本博客所有文章分类的总目录:http://www.cnblogs.com/asxiny ...

  10. P5147 随机数生成器 [数列]

    P5147 随机数生成器 数学老师看不懂系列 看题目这一片代码就很晕: int work(int x) {if(x==1)return 0;else return work(rand(1,x))+1; ...

最新文章

  1. MyAdapter Andriod
  2. 超图桌面版根据现有数据源制作一幅地图简单操作
  3. linux raid更换硬盘,linux系统raid1更换故障硬盘处理过程
  4. Linux嵌入式 -- Bootloader , Uboot
  5. go语言如何连接数据库
  6. 自动采集壁纸的微信小程序
  7. 华为方舟编译器开源!前华为人重磅解读!
  8. 怎么在Telegram电报纸飞机中搜索频道群组机器人教程。
  9. musictools(无损付费音乐免费下载神器) 最新版 v3.7.0
  10. Ubuntu18.04版本安装ssh及连接ssh的常见问题
  11. 开源一款资源分享与下载工具 —— 电驴(eMule)
  12. centos7.6安装maven
  13. 大数据分析与应用(中级) 数据挖掘概念及流程
  14. 我写过的软件之TSE-工作流程和实现
  15. 4.(css3布局)使用flex布局携程网首页案例
  16. 【收藏】一些实用的分割线
  17. 判别分析 ( distinguish analysis)(四):应用举例
  18. 文件传输工具Xftp5安装图解
  19. matlab计算不同时间步长,Matlab ODE求解器中的时间步长计算
  20. 2022安徽安全员C考试单选题库预测分享

热门文章

  1. MAC编译OpenJDK8:clang: error: include path for libstdc++ headers not found(独家解决办法)
  2. 终于把Android Studio用起来了,及体验
  3. 假期最后一天,出差赶到天津
  4. C向Python传递数组参数时,调用函数后才能销毁
  5. 商品包含资源和劳动两部分内容
  6. Verify the value of the CODE_SIGN_ENTITLEMENTS的解决办法
  7. conda安装cv2_『开发技术』Windows极简安装使用face_recognition实现人脸识别
  8. tcp 裸流 发送 html,ffmpeg 命令学习
  9. html5 video mute按钮,How to mute an html5 video player
  10. 中国计算机类研究生学校排名,2018考研:计算机专业全球院校排名公布,上海交通大学竟排第一?...