同余方程都不会写了。。还一直爆int

/*
2.关于同余方程ax ≡b(mod p),可以用Exgcd做,但注意到p为质数,y一定有逆元
首先a%p=0时 仅当b=0时有解;然后有x ≡b*a^-1(mod p),a,p互质,可用快速幂求a的逆元,*b的得到x
但是扩欧还是比快速幂快的
*/
#include<cmath>
#include<cstdio>
#include<cctype>
#include<cstring>
#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
typedef long long LL;
const int MAXIN=1<<17,N=1e5,mod=5e6;
char IN[MAXIN],*SS=IN,*TT=IN;
struct HASH
{
int Enum,H[mod+3],nxt[N],to[N],val[N];
void Init() {memset(H,0,sizeof H), Enum=0;}
inline void AddEdge(int u,int v)
{
int x=u%mod;
for(int i=H[x];i;i=nxt[i])
if(val[i]==u) {to[i]=v; return;}
to[++Enum]=v, val[Enum]=u, nxt[Enum]=H[x], H[x]=Enum;
}
int Query(int u)
{
int x=u%mod;
for(int i=H[x];i;i=nxt[i])
if(val[i]==u) return to[i];
return -1;
}
}hs; inline int read()
{
int now=0,f=1;register char c=gc();
for(;!isdigit(c);c=gc()) if(c=='-') f=-1;
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now*f;
}
int Fast_Pow(LL a,int k,int p)
{
LL t=1;
for(;k;k>>=1,a=a*a%p)
if(k&1) t=t*a%p;
return t;
}
int gcd(int a,int b)
{
return b?gcd(b,a%b):a;
}
void Exgcd(int a,int b,int &x,int &y)
{
if(!b) {x=1,y=0; return;}
Exgcd(b,a%b,x,y);
int t=x; x=y,y=t-a/b*y;
}
void Solve2(int a,int b,int p)//calc ax=b(mod p)->ax-py=b
{
int g=gcd(a,p);
if(b%g) {puts("Orz, I cannot find x!"); return;}
int x,y;
Exgcd(a,p,x,y);//calc ax+by=gcd(a,b) or a/=g,b/=g,ax+by=1
x=1LL*x*(b/g)%p;//ax*c/gcd+by*c/gcd=c*gcd/gcd=c
p/=g;
printf("%d\n",(x%p+p)%p);//x=x_0+k*p/g
}
void BSGS(int a,int b,int p)//a^x ≡b(mod p)
{
if(gcd(a,p)!=1) {puts("Orz, I cannot find x!"); return;}
hs.Init();
int m=ceil(sqrt(p-1));
LL t=b%p,AM;
for(int j=0;j<=m;++j) hs.AddEdge(t,j),t=t*a%p;
AM=Fast_Pow(a,m,p),t=AM;
for(int v,i=1;i<=m;++i,t=t*AM%p)
if((v=hs.Query(t))!=-1) {printf("%d\n",(1LL*i*m-v)%p); return;}
puts("Orz, I cannot find x!");
} int main()
{
#ifndef ONLINE_JUDGE
freopen("2242.in","r",stdin);
#endif int t=read(),k=read(),a,b,p,x,y;
while(t--)
{
a=read(),b=read(),p=read();
if(k==1) printf("%d\n",Fast_Pow(a,b,p));
else if(k==2) Solve2(a,b,p);
else BSGS(a,b,p);
}
return 0;
}

BZOJ.2242.[SDOI2011]计算器(扩展欧几里得 BSGS)的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. BZOJ 1965 洗牌(扩展欧几里得)

    容易发现,对于牌堆里第x张牌,在一次洗牌后会变成2*x%(n+1)的位置. 于是问题就变成了求x*2^m%(n+1)=L,x在[1,n]范围内的解. 显然可以用扩展欧几里得求出. # include ...

  7. bzoj 2242 [SDOI2011]计算器(数论知识)

    Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数: 3.给 ...

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

    1:快速幂  2:exgcd  3:exbsgs,题里说是素数,但我打的普通bsgs就wa,exbsgs就A了...... (map就是慢)..... #include<cstdio> # ...

  9. [原博客] BZOJ 2242 [SDOI2011] 计算器

    题目链接 noip级数论模版题了吧.让求三个东西: 给定y,z,p,计算`Y^Z Mod P` 的值. 给定y,z,p,计算满足`xy≡ Z ( mod P )`的最小非负整数. 给定y,z,p,计算 ...

随机推荐

  1. python3数字、日期和时间

    1.对数值进行取整 #使用内建的round(value,ndigits)函数来取整,ndigits指定保留的位数,在取整时会取值在偶数上,如1.25取一位会取整1.2,1.26会取整1.3 In [1 ...

  2. 什么是 maven的uber-jar

    在maven的一些文档中我们会发现 "uber-jar"这个术语,许多人看到后感到困惑.其实在很多编程语言中会把super叫做uber (因为suber可能是关键字), 这是上世纪 ...

  3. 出现“error LNK1169: 找到一个或多个多重定义的符号”的原因

    或许,有人真的会这样写程序吧...所以才会碰到如下哥们提出的问题. https://zhidao.baidu.com/question/131426210.html 出现这种问题的原因链接中的最佳答案 ...

  4. 通达OA数据库优化方案之_历史数据清理

    整体思路: 1.备份现有系统数据,提供一个可以查询历史的入口(可以查询2015年6月份以前的所有OA产生的流程) 2.删除生产环境中2015年6月份以前的流程 为避免影响考勤,暂定在本月考勤定稿后实施 ...

  5. OneNET麒麟座应用开发之一:初识OneNET麒麟座

    今天收到了OneNET麒麟座开发板.能得到使用的机会只能说是幸运的.首先上一张靓照: 板子使用的MCU是STM32F103RET6,带有GSM摸块和Wifi摸块可以联网.带有显示屏接口和I2C接口以及 ...

  6. Java 程序员必须收藏的资源大全

    Java 程序员必须收藏的资源大全 Java(27) 古董级工具 这些工具伴随着Java一起出现,在各自辉煌之后还在一直使用. Apache Ant:基于XML的构建管理工具.官网 cglib:字节码 ...

  7. MyEclipse2014安装插件的几种方式(适用于Eclipse或MyEclipse其他版本)

    农历 乙未 羊年 十一月初九 周六 2015年12月19日 14:29 编辑者:刘军 标题: 服务器的搭建请参考该文:<Win7 x64 svn 服务器搭建> ============== ...

  8. django----数据库操作(对model增删改查)

    优化查询 articles_list=models.Article.objects.all().iterator() for i in articles_list: print(i.title) 添加 ...

  9. Luogu P4945 【最后的战役】

    本来以为做法一样,就是少带个$log$,结果发现看不懂出题人的题解(我好菜啊) 那就自己写一篇吧 比较简单的$DP$思路 状态定义: 前两个转移很好处理,第三个好像就不好办了 不妨暴力定义进状态里 设 ...

  10. python+selenium六:等待相关

    显式等待(sleep): 固定的等待(死等),不管页面有没有加载完,都等设置的时间过了再做下一步操作 隐式等待 全局生效,只写一次即可(仅当前页面),缺点:如果页面一直转圈,如:js出错将等待到所设置 ...