luoguP3306 [SDOI2013]随机数生成器
将\(x_1,x_2,x_3...x_n\)写出来可以发现通项为\(a^{i-1}*x_1+b*\sum\limits_{j=0}^{i-2}a^j=a^{i-1}*x_1+b*\frac{1-a^{i-1}}{1-a}=(x_1-\frac{b}{1-a})a^{i-1}+\frac{b}{1-a}\)
所求变为求一个\(i\)满足:
\(t\equiv (x_1-\frac{b}{1-a})a^{i-1}+\frac{b}{1-a}\pmod{p}\)
\(a^{i-1}\equiv \frac{t-(\frac{b}{1-a})}{x_1-\frac{b}{1-a}}\pmod{p}\)
上BSGS即可,注意特判\(a=0/1\)。
\(a=0\):对于任意\(i,x_i=b\)
\(a=1\):\(x_i=x_1+(i-1)*b\)
解下对应的方程即可。
code:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int T;
ll a,b,x1,mod,goal;
inline ll power(ll x,ll k,ll mod)
{
ll res=1;
while(k)
{
if(k&1)res=res*x%mod;
x=x*x%mod;k>>=1;
}
return res;
}
inline ll inv(ll x,ll mod){return power(x,mod-2,mod);}
inline ll BSGS(ll a,ll b,ll mod)
{
if(b==1)return 0;
unordered_map<ll,int>mp;mp.clear();
a%=mod,b%=mod;
ll t=ceil(sqrt(mod));
ll now=1;
for(int i=0;i<=t;i++)mp[b*now%mod]=i,now=now*a%mod;
a=power(a,t,mod);
if(!a)return !b?1:-1;
now=a;
for(int i=1;i<=t;i++)
{
if(mp.count(now))return i*t-mp[now];
now=now*a%mod;
}
return -1;
}
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%lld%lld%lld%lld%lld",&mod,&a,&b,&x1,&goal);
if(x1==goal){puts("1");continue;}
if(!a){puts(b==goal?"2":"-1");continue;}
if(a==1)
{
goal=((goal-x1)%mod+mod)%mod;
ll d=__gcd(b,mod);
if(goal%d){puts("-1");continue;}
ll res=(goal*inv(b,mod)+1)%mod;
if(!res)res=mod;
printf("%lld\n",res);
continue;
}
ll res=BSGS(a,((goal-b*inv(1-a,mod)%mod)%mod+mod)%mod*inv(((x1-b*inv(1-a,mod)%mod)%mod+mod)%mod,mod)%mod,mod);
printf("%lld\n",res==-1?res:res+1);
}
return 0;
}
luoguP3306 [SDOI2013]随机数生成器的更多相关文章
- 【BZOJ 3122】 [Sdoi2013]随机数生成器 (BSGS)
3122: [Sdoi2013]随机数生成器 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1442 Solved: 552 Description ...
- bzoj3122 [SDOI2013]随机数生成器
bzoj3122 [SDOI2013]随机数生成器 给定一个递推式, \(X_i=(aX_{i-1}+b)\mod P\) 求满足 \(X_k=t\) 的最小整数解,无解输出 \(-1\) \(0\l ...
- 洛咕 P3306 [SDOI2013]随机数生成器
洛咕 P3306 [SDOI2013]随机数生成器 大力推式子??? \(X_{i}=\underbrace{a(a(\cdots(a(a}_{i-1个a}X_1+b)))\cdots)\) \(=b ...
- 【BZOJ3122】[Sdoi2013]随机数生成器 BSGS+exgcd+特判
[BZOJ3122][Sdoi2013]随机数生成器 Description Input 输入含有多组数据,第一行一个正整数T,表示这个测试点内的数据组数. 接下来T行,每行有五个整数p,a,b, ...
- 【bzoj3122】: [Sdoi2013]随机数生成器 数论-BSGS
[bzoj3122]: [Sdoi2013]随机数生成器 当a>=2 化简得 然后 BSGS 求解 其他的特判 : 当 x=t n=1 当 a=1 当 a=0 判断b==t /* http: ...
- 【洛谷 P3306】[SDOI2013]随机数生成器 (BSGS)
题目链接 怎么这么多随机数生成器 题意见原题. 很容易想到\(BSGS\)算法,但是递推式是\(X_{i+1}=(aX_i+b)\mod p\),这显然不是一个等比数列. 但是可以用矩阵乘法来求出第\ ...
- bzoj 3122: [Sdoi2013]随机数生成器
#include<cstdio> #include<iostream> #include<map> #include<cmath> #define ll ...
- bzoj 3122 [Sdoi2013]随机数生成器(逆元,BSGS)
Description Input 输入含有多组数据,第一行一个正整数T,表示这个测试点内的数据组数. 接下来T行,每行有五个整数p,a,b,X1,t,表示一组数据.保证X1和t都是合法的页码. ...
- BZOJ3122: [Sdoi2013]随机数生成器(BSGS)
题意 题目链接 Sol 这题也比较休闲. 直接把\(X_{i+1} = (aX_i + b) \pmod P\)展开,推到最后会得到这么个玩意儿 \[ a^{i-1} (x_1 + \frac{b}{ ...
随机推荐
- 0. gitlab 一些常用知识
Monitor 但是有反映 提交慢的情况时候. 可以查看一下队列 使用root账号 gitlab最多可以同时25个队列. 多了需要排队. 可以查看一下原因.
- 算法问题实战策略 PICNIC
下面是另一道搜索题目的解答过程题目是<算法问题实战策略>中的一题oj地址是韩国网站 连接比较慢 https://algospot.com/judge/problem/read/PICNIC ...
- 剑指Offer-31.整数中1出现的次数(从1到n整数中1出现的次数)(C++/Java)
题目: 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了.A ...
- 第05组 Alpha冲刺(3/4)
第05组 Alpha冲刺(3/4) 队名:天码行空 组长博客连接 作业博客连接 团队燃尽图(共享): GitHub当日代码/文档签入记录展示(共享): 组员情况: 组员1:卢欢(组长) 过去两天完成了 ...
- npm 命令 --save 和 --save-dev 的区别
回顾 npm install 命令 我们在使用 npm install 安装模块的模块的时候 ,一般会使用下面这几种命令形式: 1 2 3 4 5 6 7 npm install moduleName ...
- AntzOs系列导航
Antz操作系统 一个自制的操作系统,Antz .半图形化半命令式系统,同时嵌入Antzscript脚本语言(写在之后). 自制操作系统Antz(1)——Boot Sector 自制操作系统Antz( ...
- 使用Kafka建立可靠的高性能分布式消息传递基础结构
在优锐课学习中了解到,我们可以看到实施资源适配器以将Kafka与企业Java解决方案集成.码了很多专业的相关知识, 分享给大家参考学习. 由于世界已经变得移动化,因此应用程序现在必须实时提供数据. 不 ...
- 解决 canvas 下载含图片的画布时的报错
Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may no ...
- log4net快速上手
原文地址:https://www.cnblogs.com/lsgsanxiao/p/5845300.html 略有删改 1.配置文件,可以单独创建log4net.config文件,然后手动指定目录,也 ...
- 安全意识第三期丨关于高速ETC办理的这些新骗局,速看!
近期,最火爆的莫过于ETC了. 不仅各大银行,甚至微信和支付宝都推出了办理服务. 虽说更加便捷了,却也带来了安全隐患. 下面这个案例,大家一定要注意,已经有很多车主“中招”,落入了骗子的圈套. 注意: ...