隐藏页面特效

[SDOI2011]计算器

 

#include<cstdio> #include<cmath> #include<tr1/unordered_map> using namespace std; using namespace std::tr1; typedef long long ll; int T,K;ll mod; unordered_map<int,int>a; inline ll fpow(ll a,ll p){ ll res=1; for(;p;p>>=1,a=a*a%mod) if(p&1) res=res*a%mod; return res; } void exgcd(ll a,ll b,ll &d,ll &x,ll &y){ if(!b){d=a;x=1;y=0;return ;} exgcd(b,a%b,d,y,x); y-=x*(a/b); } ll gcd(ll a,ll b){ if(!b) return a; return gcd(b,a%b); } void CE(ll y,ll z){//calculate by exgcd ll a=y,b=-mod,d,x; d=gcd(a,b); if(z%d){printf("Orz, I cannot find x!\n");return ;} a/=d;b/=d;z/=d; exgcd(a,b,d,x,y); x*=z;x%=b; while(x<0) x+=b; printf("%lld\n",x); } void babystep_gaintstep(ll x,ll z){ ll k=1,y=z%mod;x%=mod; if(!x&&!z){puts("1");return ;} if(!x&&z!=1){printf("Orz, I cannot find x!\n");return ;} ll m=ceil(sqrt(mod-1)); ll ni=fpow(x,m);ni=fpow(ni,mod-2); a.clear(); a[1]=m+1; for(ll j=1;j<m;j++){ k=k*x%mod; if(!a[k]) a[k]=j; } for(ll i=0;i<m;i++){ ll u=a[y]; if(u){ if(u==m+1) printf("%lld\n",i*m); else printf("%lld\n",i*m+u); return ; } y=y*ni%mod; } printf("Orz, I cannot find x!\n"); } int main(){ scanf("%d%d",&T,&K); if(K==1){ for(int y,z,p;T--;){ scanf("%d%d%d",&y,&z,&p); mod=p; printf("%lld\n",fpow(y,z)); } } else if(K==2){ for(int y,z,p;T--;){ scanf("%d%d%d",&y,&z,&p); mod=p; CE(y,z); } } else{ for(int y,z,p;T--;){ scanf("%d%d%d",&y,&z,&p); mod=p; babystep_gaintstep(y,z); } } return 0; }

 


__EOF__

本文作者shenben
本文链接https://www.cnblogs.com/shenben/p/6429937.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   神犇(shenben)  阅读(548)  评论(2编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示