BZOJ3122: [Sdoi2013]随机数生成器
2016-02-17 13:48
302 查看
BSGS原来就是SB暴力。。。日了狗了
#include<cstdio> #include<iostream> #include<cstring> #include<map> #include<cmath> using namespace std; #define ll long long ll ex_gcd(ll &x,ll &y,ll a,ll b) { if(b==0){x=1;y=0;return a;} ll c=ex_gcd(x,y,b,a%b),tp=x; x=y;y=tp-a/b*y; return c; } ll p,T; char c; inline void read(ll &a) {a=0;do c=getchar();while(c<'0'||c>'9');while(c<='9'&&c>='0')a=(a<<3)+(a<<1)+c-'0',c=getchar();} map<ll,ll>S; int main() { freopen("std.in","r",stdin); freopen("self.out","w",stdout); read(T); while(T--) { ll p,i,a,b,x1,t; ll xa,xp; read(p),read(a),read(b),read(x1),read(t); a%=p; if(t>=p){puts("-1");continue;} if(x1==t){puts("1");continue;} if(a==1) { if(b==0) puts("-1"); else { ll xi,yq; ll c=ex_gcd(xi,yq,b,p); if((t-x1)%c||c!=1)puts("-1"); else printf("%lld\n",1+((xi*(t-x1)/c)%p+p)%p); } continue; } if(a==0) { if(t==b)puts("2"); else puts("-1");continue; } ex_gcd(xa,xp,a-1,p); S.clear(); xa%=p; xa+=p; xa%=p; ll xb; ex_gcd(xb,xp,x1+b*xa,p); xb%=p; xb+=p; xb%=p; ll right=((t+b*xa)%p)*xb; right%=p; right+=p; right%=p; ll size=sqrt(p)+1; ll tp=right; for(i=0;i<=size;i++,tp*=a,tp%=p) S[tp]=i+1; tp=a; ll left=1,ab=1; for(i=1;i<=size;i++)ab*=a,ab%=p; left=ab; for(i=1;i<=1+p/size;i++,left*=ab,left%=p) if(S[left]){ printf("%lld\n",i*size-S[left]+2);goto asd;} puts("-1"); asd:; } return 0; }
相关文章推荐
- process launch failed: Security
- [BZOJ 3895]取石子---博弈+石子合并
- IOS上如何判断一个NSString 包含的字符数
- 基于hibernate_validator的异步表单校验框架使用说明
- 2014年50个程序员最适用的免费JQuery插件
- Floating button 常用属性
- date 命令
- EXC_BAD_ACCESS调试
- iOS开发篇(五)SSZipArchive三方框架的使用与介绍
- (1) Python 内置类型 –- 字符串
- 删除重复的字段
- 健康港慢性萎缩性胃炎饮食注意事项
- Java——用户激活邮件工具类
- 在ACE中使用epoll
- cal 命令
- 美国惊人3堂课, 彻底改变中国富二代!
- LeetCode - 18. 4Sum
- 同名程序同时运行限制
- 技术与产品的反思
- as导入eclipse项目出现There are unrecoverable errors which must be corrected first