【bzoj3122】[Sdoi2013]随机数生成器 BSGS
来源:互联网 发布:sip协议端口号 编辑:程序博客网 时间:2024/05/29 08:45
xi=axi+b
特判x1是否等于t
当a=0时,xi=b,直接判断t是否等于b
当a=1时,xi=x1+(i-1)*b=t,特判b是否等于0,i=(t-x1)*b^(-1)+1
当b=0时,xi=x1*a^(i-1)=t,如果x1或a=0,则判断t是否等于0,否则,BSGS
否则,
xi=axi-1+b
xi+b/(a-1)=axi-1+ab/(a-1)
xi+b/(a-1)=a(xi-1+b/(a-1))
xi+b/(a-1)=(x1+b/(a-1))*a^(i-1)
xi=(x1+b/(a-1))*a^(i-1)-b/(a-1)
可以看做a^y=z(mod p)的形式
z=(t+b*(a-1)^(-1))*(x1+b*(a-1)^(-1))^(-1)
特判x1是否等于t
当a=0时,xi=b,直接判断t是否等于b
当a=1时,xi=x1+(i-1)*b=t,特判b是否等于0,i=(t-x1)*b^(-1)+1
当b=0时,xi=x1*a^(i-1)=t,如果x1或a=0,则判断t是否等于0,否则,BSGS
否则,
xi=axi-1+b
xi+b/(a-1)=axi-1+ab/(a-1)
xi+b/(a-1)=a(xi-1+b/(a-1))
xi+b/(a-1)=(x1+b/(a-1))*a^(i-1)
xi=(x1+b/(a-1))*a^(i-1)-b/(a-1)
可以看做a^y=z(mod p)的形式
z=(t+b*(a-1)^(-1))*(x1+b*(a-1)^(-1))^(-1)
y=i-1<=>i=y+1
#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<algorithm>#include<iostream>#include<map>using namespace std;long long a,b,x1,t,mod;int T;map<long long,int> mp;long long power(long long x,long long y,long long mod){long long ans=1;while (y){if (y&1) ans=ans*x%mod;x=x*x%mod;y>>=1;}return ans;}int BSGS(long long y,long long z,long long mod){if (y==0 && z==0) return 1;if (y==0 && z!=0) return -2;mp.clear();long long temp=z,p=power(y,mod-2,mod);int k=ceil(sqrt(mod));mp[z]=k+1;for (int i=1;i<k;i++){temp=temp*p%mod;if (!mp[temp]) mp[temp]=i;}temp=1;p=power(y,k,mod);for (int i=0;i<k;i++,temp=temp*p%mod){if (mp[temp]){if (mp[temp]==k+1) return i*k;else return i*k+mp[temp];}}return -2;}int main(){scanf("%d",&T);while (T--){scanf("%lld%lld%lld%lld%lld",&mod,&a,&b,&x1,&t);if (x1==t) {printf("1\n");continue;}if (a==0){if (t==b) printf("2\n"); else printf("-1\n");continue;}if (a==1) {if (b) printf("%d\n",((t-x1+mod)%mod)*power(b,mod-2,mod)%mod+1);else{if (t==x1) printf("1\n");else printf("-1\n");}continue;}long long tmp=power(a-1,mod-2,mod);printf("%d\n",BSGS(a,((t+b*tmp)%mod)*power((x1+b*tmp)%mod,mod-2,mod)%mod,mod)+1);}return 0;}
0 0
- 【bzoj3122】[Sdoi2013]随机数生成器 BSGS
- 【BZOJ3122】【SDOI2013】随机数生成器(快速幂+BSGS)
- bzoj3122 [Sdoi2013]随机数生成器(bsgs+扩欧+数列)
- bzoj3122 随机数生成器 BSGS
- BZOJ3122: [Sdoi2013]随机数生成器
- bzoj3122 [Sdoi2013]随机数生成器
- bzoj3122【SDOI2013】随机数生成器
- bzoj3122: [Sdoi2013]随机数生成器
- 【bzoj3122】【SDOI2013】 随机数生成器
- BZOJ3122 && XOJ17 [Sdoi2013]随机数生成器
- BZOJ3122 [Sdoi2013]随机数生成器 数论
- bzoj3122 随机数生成器 BSGS+费马小定理求逆元
- BZOJ-3122-随机数生成器-SDOI2013-BSGS
- BZOJ 3122 [Sdoi2013]随机数生成器 BSGS
- BZOJ 3122: [Sdoi2013]随机数生成器 ex_gcd+BSGS
- Bzoj 3122 [Sdoi2013]随机数生成器(BSGS+exgcd)
- 【JZOJ3211】【SDOI2013】随机数生成器
- [bzoj 3122] [Sdoi2013]随机数生成器:数论,同余,分类讨论,BSGS
- OpenCV配置]OpenCV在Win7 Win8 VS2010 VS2012下的配置(附文档+视频 吐血之作
- LeetCode 89: Gray Code Generator
- POJ 2488 A Knight's Journey
- 关于 error: LNK1123: failure during conversion to COFF: file invalid or corrupt 错误的解决
- Unity3d BTDF实时折射模拟有粗糙度的半透明物体
- 【bzoj3122】[Sdoi2013]随机数生成器 BSGS
- Maven简单命令
- Android之Handler在新线程中读取网络的两种方法
- BZOJ_P2330 [SCOI2011]糖果(差分约束+最长路)
- AlphaGo打星际,人类的胜算几何?
- BZOJ 3720 gty的妹子树
- 如何加载包下面的所有类?
- Volley使用JsonObjectRequest发送Post请求失败
- C++学习笔记