题意

链接

给定 $p,\ a,\ b, \ x_1$,现有一数列

$$x_{i+1} \equiv (ax_i + b) \ mod \ p$$

求最小的 $i$ 满足 $x_i = t$

分析

代码

#include<bits/stdc++.h>
using namespace std; typedef long long ll; //ax + by = d,且|x|+|y|最小,其中d=gcd(a,b)
//即使a, b在int范围内,x和y也有可能超过int范围
void exgcd(ll a, ll b, ll &d, ll &x, ll &y)
{
if (!b){ d = a; x = ; y = ;}
else{ exgcd(b, a % b, d, y, x); y -= x * (a / b);}
} //计算模n下a的逆。如果不存在逆,返回-1
//ax=1(mod n)
ll inv(ll a, ll n)
{
ll d, x, y;
exgcd(a, n, d, x, y);
return d == ? (x + n) % n : -;
} inline ll bsgs(ll a, ll b, ll p) {
a %= p;
b %= p;
std::map<ll, ll> map;
ll m = ceil(sqrt(p)), t = ;
for (int i = ; i < m; i++) {
if (!map.count(t)) map[t] = i;
t = t * a % p;
} ll k = inv(t, p), w = b;
for (int i = ; i < m; i++) {
if (map.count(w)) return i * m + map[w];
w = w * k % p;
} return -;
} inline ll solve(ll p, ll a, ll b, ll x1, ll t) {
if (t == x1) return ;
else if (a == ) return b == t ? : -;
else if (a == ) {
if (!b) return -;
return ((((t - x1) % p + p) % p) * inv(b, p) % p) + ;
} else {
ll q = inv( - a + p, p);
ll d = (((t - b * q) % p + p) % p) * inv(((x1 - b * q) % p + p) % p, p);
ll ans = bsgs(a, d, p);
if (ans == -) return -;
else return ans + ;
}
} int main() {
int T;
scanf("%d", &T);
while (T--) {
int p, a, b, x1, t;
scanf("%d %d %d %d %d", &p, &a, &b, &x1, &t);
printf("%lld\n", solve(p, a, b, x1, t));
}
}

发现BZOJ还能下测试数据:https://darkbzoj.tk/data/

参考链接:https://oi.men.ci/sdoi2013-random/

最新文章

  1. Android安全攻防战,反编译与混淆技术完全解析(下)
  2. 企业架构(Enterprise Architecture)
  3. JS之setAttribute和getAttribute
  4. Spring Data Jpa配置
  5. Linux命令之chmod 及+s 参数(临时以所有者权限执行)
  6. 7个热门开源PHP框架
  7. 2013ACM-ICPC亚洲区南京站现场赛G题
  8. nginx使用自认证的https证书
  9. Spring IOC之基于注解的容器配置
  10. iOS混合应用开发入门
  11. asp.net中配置使用Sqlite轻型数据库
  12. tomcat启动端口号报错java.net.BindException: Cannot assign requested address
  13. vs2017中生成.Net Standard Libarary的Nuget Package
  14. 关于python,完善我计算机知识的一步。
  15. AXURE 8弄一个轮播图的步骤
  16. 正版phpstorm,webstorm,goland(Jetbrains系列都可以)免费激活步骤(图文详解)(亲测有效)
  17. LiveCharts文档-4基本绘图-2基本柱形图
  18. day5模块学习--re正则模块
  19. ABBYY FineReader Pro for Mac有哪些特性(上)
  20. python 常见报错汇总

热门文章

  1. (四)Resquest 知识点总结 (来自那些年的笔记)
  2. c++学习---const 和 string
  3. java基础知识学习 内存相关
  4. 博客自定义1-皮肤模板 基于SimpleMemory 添加到顶部小按钮
  5. Linux 数据库MySql 安装配置教程!
  6. numix Docky
  7. js之拖拽事件
  8. 两个重叠的div做前后翻转
  9. socket基本用法
  10. 【转载】salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL)