博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
省选专练[SDOI2011]计算器
阅读量:4647 次
发布时间:2019-06-09

本文共 2060 字,大约阅读时间需要 6 分钟。

再一次检验了我似乎不会EXGCD

我觉得实际上没有那么毒吧

由于不一定互质且不是倍数一定不成立(裴蜀定理)

先特判

然后如果互质不是乘z吗

所以就除去GCD再乘

Ps.我还瓜皮的以为除了GCD再解一次

然后接着是一个BSGS不卡map

#include
using namespace std;typedef int INT;#define LL long long#define int long longinline void read(int &x){ x=0; char ch=getchar(); int f=1; while(ch<'0'||ch>'9'){ if(ch=='-')f=-1; ch=getchar(); } while(ch>='0'&&ch<='9'){ x=x*10+ch-'0'; ch=getchar(); } x*=f;}int mod;inline int quick_pow(LL x,int k){ LL ret=1; while(k){ if(k%2==1){ ret=ret*x%mod; } k/=2; x=x*x%mod; } return ret;}inline LL EXGCD(LL &x,LL &y,int a,int b){ if(!b){ x=1; y=0; return a; } else{ int GCD=EXGCD(x,y,b,a%b); int tmp=x; x=y; y=tmp-y*(a/b); return GCD; }}map
mmp;inline int BSGS(int y,int z){ int m=ceil(sqrt(mod)); mmp.clear(); mmp[z%mod]=0; int now=1; for(int i=1;i<=m;i++){ now=now*y%mod; mmp[now*z%mod]=i; } int t=quick_pow(y,m); int ans=1; for(int i=1;i<=m;i++){ ans=ans*t%mod; if(mmp.count(ans)){ int key=i*m-mmp[ans]; return (key%mod+mod)%mod; } }return -1;}INT main(){// freopen("test.in","r",stdin); int Cas; int opt; read(Cas); read(opt); while(Cas--){ int y,z; read(y); read(z); read(mod); if(opt==1){ cout<
<<'\n'; } if(opt==2){ LL dx,dy; int GCD=EXGCD(dx,dy,y,mod); if((z%GCD)!=0){ cout<<"Orz, I cannot find x!"<<'\n'; } else{ cout<<((dx*z/GCD)%mod+mod)%mod<<'\n'; } } if(opt==3){ int ans=BSGS(y,z); if(ans==-1||y%mod==0){ cout<<"Orz, I cannot find x!"<<'\n'; } else{ cout<
<<'\n'; } } } }

 

转载于:https://www.cnblogs.com/Leo-JAM/p/10079145.html

你可能感兴趣的文章
C语言的变量的内存分配
查看>>
clientcontainerThrift Types
查看>>
链接全局变量再说BSS段的清理
查看>>
hdu 1728 逃离迷宫
查看>>
HTML5与CSS3权威指南之CSS3学习记录
查看>>
docker安装部署
查看>>
AVL树、splay树(伸展树)和红黑树比较
查看>>
多媒体音量条显示异常跳动
查看>>
运算符及题目(2017.1.8)
查看>>
React接入Sentry.js
查看>>
ssh自动分发密匙脚本样板
查看>>
转 小辉_Ray CORS(跨域资源共享)
查看>>
Linux安装postgresql
查看>>
MyBatis启动:MapperStatement创建
查看>>
【 全干货 】5 分钟带你看懂 Docker !
查看>>
[转]优化Flash性能
查看>>
popStar手机游戏机机对战程序
查看>>
Java Web项目结构
查看>>
lambda表达式树
查看>>
二次注入原理及防御
查看>>