正题

题目链接:https://www.luogu.com.cn/problem/P3306


题目大意

给出一个p,a,b,x1,tp,a,b,x_1,tp,a,b,x1​,t,有xi=axi−1+bx_i=ax_{i-1}+bxi​=axi−1​+b
求一个最小的nnn使得xn=tx_n=txn​=t


解题思路

下标缩一下先变成x0x_0x0​会更好算一点,只考虑x0x_0x0​的贡献就是x0×anx_0\times a^nx0​×an,这个比较好搞。

bbb的贡献的话,对于第iii次加入的bbb贡献是an−ia^{n-i}an−i总共也就是b×∑i=0n−1aib\times \sum_{i=0}^{n-1}a^ib×∑i=0n−1​ai
通项公式一下合起来就是
x0an+an−1a−1b=tx_0a^n+\frac{a^n-1}{a-1}b=tx0​an+a−1an−1​b=t
把ana^nan提到前面来就是
an=t(a−1)+bxa−x+ba^n=\frac{t(a-1)+b}{xa-x+b}an=xa−x+bt(a−1)+b​
后面那个是已知的,然后就是上BSGS\text{BSGS}BSGS就好了。

需要注意的是如果a=1a=1a=1就不能用通项公式了,得上exgcd\text{exgcd}exgcd来搞。

要特判的东西有点多就不多讲了


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<cmath>
#define ll long long
using namespace std;
ll T,p,a,b,x,t,ans;
map<ll,ll> v;
ll power(ll x,ll b){ll ans=1;while(b){if(b&1)ans=ans*x%p;x=x*x%p;b>>=1;}return ans;
}
ll exgcd(ll a,ll b,ll &x,ll &y){if(!b){x=1;y=0;return a;}ll d=exgcd(b,a%b,x,y);ll z=x;x=y;y=z-a/b*y;return d;
}
void works(ll a,ll b,ll p){ll x,y;ll d=exgcd(a,p,x,y);if(b%d){printf("-1\n");return;}x*=b/d;y*=b/d;printf("%lld\n",(x%(d*p)+d*p)%(d*p)+1);
}
ll work(ll a,ll b,ll p){if(!a&&!b)return 1;if(!a)return -2;ll t=sqrt(p)+1;v.clear();for(ll i=0,z=1;i<t;i++,z=z*a%p)v[z*b%p]=i;a=power(a,t);if(b==1||!a)return 1;else if(!a)return -2;ll ans=1e18;for(ll i=0,tmp=1;i<=t;i++,tmp=tmp*a%p){ll j=(v.find(tmp)!=v.end())?v[tmp]:-1;if(j>=0&&i*t-j>=0)ans=min(ans,i*t-j);}if(ans==1e18)return -2;return ans;
}
signed main()
{scanf("%lld",&T);while(T--){scanf("%lld%lld%lld%lld%lld",&p,&a,&b,&x,&t);if(!a&&!t&&b){puts("-1");continue;}if(x==t){puts("1");continue;}if(a==1){works(b,(t-x+p)%p,p);continue;}t=(t*(a-1)+b)%p;x=(x*a-x+b+p)%p;t=t*power(x,p-2)%p;t=(t+p)%p;printf("%lld\n",work(a,t,p)+1);}return 0;
}

P3306-[SDOI2013]随机数生成器【BSGS】相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  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. BZOJ1503:[NOI2004]郁闷的出纳员——题解
  2. 不借助第三方工具查看映像路径(系统进程路径).
  3. 组策略安全选项对应注册表项汇总
  4. P2837 晚餐队列安排
  5. Docker-Compose命令详解
  6. java学习笔记30(IO :缓冲流)
  7. rust8G内存够不够用_Rust是如何做到内存安全的
  8. 什么都没学到,记录一个鼠标监听事件吧
  9. c c++ 函数内数组初值_C/C Plus Plus中的函数
  10. 2021年的第一本书,就从这里选
  11. Android创建定时和周期任务
  12. 国内浏览器双核模式 默认切换chrome内核
  13. 怎么把多个音频合并成一个音频?
  14. 漫步微积分二十二——微分方程和分离变量法
  15. gtp怎么安装系统_UEFI+GTP模式下使用GHO文件安装Win8系统的具体操作方法
  16. bios找不到硬盘模式选项如何解决?
  17. 电子招标投标系统 —采购招投标管理一体化系统-
  18. windows操作系统基础总结
  19. 苹果应用商店审核指南
  20. Python零基础之自动登录12306

热门文章

  1. jmeter xml 请求_Jmeter学习笔记(十六)——HTTP请求之content-type
  2. python二维列表写入excel_用Python实现合并excel列表
  3. 中connect怎么用_烘焙中的各种酒,到底该怎么用?
  4. 鸿蒙系统2020正式版,鸿蒙2.0来了!华为开发者大会HDC 2020宣布
  5. php html asp .net iis tomcat,iis+apache+tomcat 整合共享80口 支持ASP .NET JSP PHP全能WEB服务...
  6. 快速幂算法相关题目(Leetcode题解-Python语言)
  7. html位置下移像素点,吃透移动端 1px的具体用法
  8. [JavaWeb-MySQL]事务的四大特征和隔离级别
  9. [Java基础]Random
  10. sprintf()函数的使用