博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
问题 G: 【一本通提高同余问题】计算器
阅读量:6688 次
发布时间:2019-06-25

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

模板题,最重要的是BSGS算法

#include
using namespace std;long long T,K,opt;long long yy,z,p,ans1,ans2,ans3;long long newans;long long x,y;long long Quickpow(long long x,long long n,long long mod){ long long base=1; while(n) { if(n&1) { base=(long long)base*x%mod; } n>>=1; x=x*x%mod; } return base;}long long Exgcd(long long a,long long &x,long long b,long long &y){ if(b==0) { x=1; y=0; return a; } long long Gcd=Exgcd(b,x,a%b,y); long long tmp; tmp=x; x=y; y=tmp-(a/b)*y; return Gcd;}long long BSGS(long long a,long long b,long long p){ map
hash; hash.clear(); b%=p; int t=(int)sqrt(p)+1; for(int j=0;j
=0&&i*t-j>=0) { return i*t-j; } } return -1;}int main(){ scanf("%lld%lld",&T,&K); while(T--) { if(K==1) { cin>>yy>>z>>p; ans1=Quickpow(yy,z,p); cout<
<
>yy>>z>>p; ans2=Exgcd(yy,x,p,y); if(z%ans2!=0) { printf("Orz, I cannot find x!\n"); continue; } else { newans=((x*(z/ans2))%(p/ans2)+(p/ans2))%(p/ans2); } cout<
<
>yy>>z>>p; ans3=BSGS(yy,z,p); if(ans3==-1) { printf("Orz, I cannot find x!\n"); continue; } else { cout<
<

 

转载于:https://www.cnblogs.com/LJB666/p/11010343.html

你可能感兴趣的文章
类欧几里得算法
查看>>
Linux目录结构介绍
查看>>
关于Yii的一些认识和学习
查看>>
若一整系数$n$次多项式在有理数域可约,则总可以分解成次数小于$n$的两整系数多项式之积....
查看>>
docker tomcat 环境构建
查看>>
EF Core CodeFirst实践 ( 使用MS SqlServer)
查看>>
MGR 架构 ~ DBA相关运维管理
查看>>
vue中父子组件以及兄弟组件的传值情况?
查看>>
Oracle 使用RMAN COPY 移动 整个数据库 位置 示例
查看>>
Sencha toucha2中设置文本框默认提示文字的PlaceHolder属性的颜色
查看>>
PHP模拟POST提交数据三种方式
查看>>
共享纸巾更换主板代码分析 共享纸巾主板更换后的对接代码
查看>>
页面添加友盟(CNZZ)统计和事件追踪
查看>>
新maven项目创建JSP出现小红叉报错 javax.servlet.http.HttpServlet not found
查看>>
跨域问题
查看>>
两年之中
查看>>
JQuery 获取验证码倒计时
查看>>
scala(13)-----集合(Collection)-------元组
查看>>
线段树模板
查看>>
tomcat下发布项目,遇到的问题总结
查看>>