1:快速幂  2:exgcd  3:exbsgs,题里说是素数,但我打的普通bsgs就wa,exbsgs就A了......

(map就是慢).....

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<map>
#define LL long long
using namespace std;
map<long long,int> pp;
map<long long,bool> bo;
LL a,b,c;
int T,opt;
LL qp(LL a,LL b){
LL ans=1;
while(b){
if(b&1)ans=(ans*a)%c;
a=(a*a)%c;b>>=1;
}return ans;
}
LL gcd(LL x,LL y){return y==0?x:gcd(y,x%y);}
LL exgcd(LL o,LL p,LL &x,LL &y){
if(p==0){x=1;y=0;return o;}
LL gcd=exgcd(p,o%p,x,y);
LL t=x; x=y;
y=t-(o/p)*x;
return gcd;
}
LL exbsgs(LL a,LL b,LL c){
pp.clear();bo.clear();
LL g,d=1,m,now=1;int num=0;
while((g=gcd(a,c))>1){
if(b%g!=0)return -1;
b/=g;c/=g;num++;
d=(d*(a/g))%c;
}
//printf("num==%d\n",num);
m=ceil(sqrt(c));
for(int i=0;i<m;i++){
if(!bo[now]){bo[now]=1;pp[now]=i;}
now=(now*a)%c;
}
for(int i=0;i<=m;i++){
LL x,y,e=exgcd(d,c,x,y);
x=(x*b%c+c)%c;
if(bo[x]) return pp[x]+i*m+num;
d=(d*now)%c;
}
return -1;
}
int main(){
scanf("%d%d",&T,&opt);
if(opt==1){
while(T--){
scanf("%lld%lld%lld",&a,&b,&c);
printf("%lld\n",qp(a,b));
}
}
if(opt==2){
while(T--){
scanf("%lld%lld%lld",&a,&b,&c);
LL x,y;
LL d=exgcd(a,c,x,y);
if(b%d!=0){printf("Orz, I cannot find x!\n");continue;}
x*=b/d;
LL cd=c/d;
x=(x%cd+cd)%cd;
printf("%lld\n",x);
}
}
if(opt==3){
while(T--){
scanf("%lld%lld%lld",&a,&b,&c);
LL ans=exbsgs(a,b,c);
if(ans==-1)printf("Orz, I cannot find x!\n");
else printf("%lld\n",ans);
}
}
return 0;
}

bzoj 2242 [SDOI2011]计算器 快速幂+扩展欧几里得+BSGS的更多相关文章

  1. BZOJ 2242: [SDOI2011]计算器( 快速幂 + 扩展欧几里德 + BSGS )

    没什么好说的... --------------------------------------------------------------------- #include<cstdio&g ...

  2. 【bzoj2242】: [SDOI2011]计算器 数论-快速幂-扩展欧几里得-BSGS

    [bzoj2242]: [SDOI2011]计算器 1.快速幂 2.扩展欧几里得(费马小定理) 3.BSGS /* http://www.cnblogs.com/karl07/ */ #include ...

  3. BZOJ 2242: [SDOI2011]计算器 [快速幂 BSGS]

    2242: [SDOI2011]计算器 题意:求\(a^b \mod p,\ ax \equiv b \mod p,\ a^x \equiv b \mod p\),p是质数 这种裸题我竟然WA了好多次 ...

  4. BZOJ-2242 计算器 快速幂+拓展欧几里得+BSGS(数论三合一)

    污污污污 2242: [SDOI2011]计算器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2312 Solved: 917 [Submit][S ...

  5. 【codevs 1565】【SDOI 2011】计算器 快速幂+拓展欧几里得+BSGS算法

    BSGS算法是meet in the middle思想的一种应用,参考Yveh的博客我学会了BSGS的模版和hash表模板,,, 现在才会hash是不是太弱了,,, #include<cmath ...

  6. 【bzoj1965】: [Ahoi2005]SHUFFLE 洗牌 数论-快速幂-扩展欧几里得

    [bzoj1965]: [Ahoi2005]SHUFFLE 洗牌 观察发现第x张牌 当x<=n/2 x=2x 当x>n/2 x=2x-n-1 好像就是 x=2x mod (n+1)  就好 ...

  7. bzoj 2242: [SDOI2011]计算器【扩展欧几里得+快速幂+BSGS】

    第一问快速幂板子 第二问把式子转化为\( xy\equiv Z(mod P)\rightarrow xy+bP=z \),然后扩展欧几里得 第三问BSGS板子 #include<iostream ...

  8. bzoj 2242: [SDOI2011]计算器 BSGS+快速幂+扩展欧几里德

    2242: [SDOI2011]计算器 Time Limit: 10 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description 你被 ...

  9. BZOJ.2242.[SDOI2011]计算器(扩展欧几里得 BSGS)

    同余方程都不会写了..还一直爆int /* 2.关于同余方程ax ≡b(mod p),可以用Exgcd做,但注意到p为质数,y一定有逆元 首先a%p=0时 仅当b=0时有解:然后有x ≡b*a^-1( ...

随机推荐

  1. box-sizing属性(指定针对元素的宽度与高度的计算方法)

    在css中,使用width属性与height属性来指定元素的宽度与高度.使用box-sizing属性,可以指定用width属性与height属性分别指定的宽度值与高度值是否包含元素的内部补白区域与边框 ...

  2. Python 可视化TVTK CubeSource管线初使用

    CubeSource对象是长方体数据源对象.本次在安装成功TVTK库的基础上显示一个长方体对象.通过以下代码,我们设置一个长宽高分别为1.0,2.0,3.0的长方体数据源并通过管线显示出来. from ...

  3. 面向对象(this的问题一)

    <!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content=&q ...

  4. maven常见配置

    maven surefire plugin 默认执行失败后,不会继续执行,需要在</configuration>中设置参数 <testFailureIgnore>true< ...

  5. complex figure

    1/z   ----direct by MATLAB exp(z)    by QT logZ       by  QT 1/z      用QT画的 -----2018-03-17--------- ...

  6. Ueditor1.3.6 setContent的一个bug

    Baidu Uedtior这个版本的占位标签为script标签,UE.get("editor")操作初始化编辑器,这个初始化动作似乎是个异步动作,在这个语句之后如果setConte ...

  7. Bootstrap 4,“未捕获错误:Bootstrap工具提示需要Tether(http://github.hubspot.com/tether/)”

    如果出现了这个错误,我想你是没有引用tether文件,这在v4之前不需要单独引入的. https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/te ...

  8. 正确截取List指定位置的内容

    正确截取List指定位置的内容 import java.util.ArrayList; import java.util.List; public class ListUtils { public s ...

  9. EF Code First中的主外键约定和一对一、一对多关系的实现

    对于主外键约定的理解,其实是学习实体间一对一和一对多关系的基础. 1.1 主键(Key)约定 主键的默认约定是:只要字段名为--实体名(类名)+"id"(不区分大小写),这就算是默 ...

  10. Python学习摘要201802

    [基础]变量设计机制 [个人理解]python的变量与C++语言中的指针类似,是指向内存数据的一个引用.变量分为不可变变量string/int/float/tuple和可变变量list/dict. 对 ...