k=1:裸的快速幂
k=2:xy=z+kp,直接exgcd,这个可以不用解释了,不懂的同学可以看代码
k=3:裸的BSGS
重点是k=3(BSGS学习)
ax=b(mod p)求解这个同余方程
只能求gcd(a,p)=1的情况。
如何求解?很容易发现解一定位于{0,p-1}之间,设q=ceil(√p),然后x可以表示成cq-d
因为ax=b(mod p),所以acq=b*ad(mod p)
于是可以这样考虑:枚举d∈[1,q],将值插入哈希表,如有重复的则只记录最大的d,因为本题是求最小解,再枚举c=1...q,查询acq是否在哈希表内,如果在就可以直接跳出来。
注意要特判a或b等于0的情况就可以了。
不说太多了,直接上模板:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
map<int,int>hsh;
ll y,z,p;
ll qpow(ll a,ll b)
{
a%=p;
ll ret=;
while(b)
{
if(b&)ret=ret*a%p;
a=a*a%p,b>>=;
}
return ret;
}
ll exgcd(ll a,ll b,ll&x,ll&y)
{
if(b==){x=,y=;return a;}
ll ret=exgcd(b,a%b,y,x);y-=a/b*x;
return ret;
}
void solve2(ll a,ll b)
{
ll x,y,ans,d,s;
d=exgcd(a,p,x,y);
if(b%d){puts("Orz, I cannot find x!");return;}
ans=b/d*x;
s=p/d;
ans=(ans%s+s)%s;
printf("%lld\n",ans);
}
void solve3()
{
y%=p,z%=p;
if(!y)
{
if(!z)puts("");else puts("Orz, I cannot find x!");
return;
}
ll m=ceil(sqrt(p)),v=qpow(y,p-m-),e=,ret;
hsh.clear();
hsh[]=m+;
for(ll i=;i<=m;i++)
{
e=e*y%p;
if(!hsh[e])hsh[e]=i;
}
ret=-;
for(ll i=;i<m;i++)
{
if(hsh[z]){ret=i*m+(hsh[z]==m+?:hsh[z]);break;}
z=z*v%p;
}
if(ret==-)puts("Orz, I cannot find x!");
else printf("%d\n",ret);
}
int main()
{
int T,k;
scanf("%d%d",&T,&k);
while(T--)
{
scanf("%lld%lld%lld",&y,&z,&p);
if(k==)printf("%lld\n",qpow(y,z));
else if(k==)solve2(y,z);
else solve3();
}
}

[SDOI2011]计算器(exgcd&BSGS)的更多相关文章

  1. 【bzoj2242】[SDOI2011]计算器 EXgcd+BSGS

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

  2. BZOJ2242[SDOI2011]计算器——exgcd+BSGS

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

  3. BZOJ2242 [SDOI2011]计算器 【BSGS】

    2242: [SDOI2011]计算器 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 4741  Solved: 1796 [Submit][Sta ...

  4. BZOJ 2242 [SDOI2011]计算器 ——EXGCD/快速幂/BSGS

    三合一的题目. exgcd不解释,快速幂不解释. BSGS采用了一种不用写EXGCD的方法,写起来感觉好了很多. 比较坑,没给BSGS的样例(LAJI) #include <map> #i ...

  5. 【洛谷 P2485】 [SDOI2011]计算器 (BSGS)

    题目链接 第一问:快速幂 第二问:扩欧解线性同余方程 第三问:\(BSGS\) 三个模板 #include <cstdio> #include <cmath> #include ...

  6. 牛客20347 SDOI2011计算器(bsgs

    https://ac.nowcoder.com/acm/problem/20347 这篇是为了补bsgs(北上广深算法). 题意: 1.给定y,z,p,计算Y^Z Mod P 的值:  2.给定y,z ...

  7. [SDOI2011]计算器(BSGS)

    洛古题面 对于操作一,用快速幂算即可 代码如下 int quickpow(int a,int b,int k) { int r=1; while(b) { if(b&1) r=(r*a)%k; ...

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

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

  9. BZOJ_2242_[SDOI2011]计算器_快速幂+扩展GCD+BSGS

    BZOJ_2242_[SDOI2011]计算器_快速幂+扩展GCD+BSGS 题意: 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p, ...

  10. 【BZOJ2242】[SDOI2011]计算器 BSGS

    [BZOJ2242][SDOI2011]计算器 Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ ...

随机推荐

  1. 利用 Docker 搭建单机的 Cloudera CDH 以及使用实践

    想用 CDH 大礼包,于是先在 Mac 上和 Centos7.4 上分别搞个了单机的测试用.其实操作的流和使用到的命令差不多就一并说了: 首先前往官方下载包: https://www.cloudera ...

  2. 使用getopts处理输入参数

    在编写shell脚本中,需要输入参数,使用过程中,getopts更加方便.可以很好的处理用户输入的参数和参数值. 参加如下一段脚本: #!/bin/bash while getopts ": ...

  3. dbExpress操作中用TDBGrid显示数据

    由于一些数据感知组件如TDBGrid等是需要用到数据缓存的,这和dbExpress组件的存取机制是矛盾的.所以当打开数据集时会出现如下内容的警告框:“Operation not allowed on ...

  4. table2excel使用

    原table2excel代码 /* * 采用jquery模板插件——jQuery Boilerplate * * Made by QuJun * 2017/01/10 */ //table2excel ...

  5. poj-2513(字典树+欧拉通路)

    题意:给你n个火柴棍,每个火柴棍头和尾两种颜色,问你是否存在能够把这些火柴棍摆成一行的情况,两个相连的火柴棍的颜色需要一样: 解题思路:最初的思路是用map标记颜色,然后把每种颜色看作点,每根火柴棍看 ...

  6. h.264并行熵解码

    在前面讨论并行解码的章节中,我们专注于讨论解码的宏块重建部分,甚至把宏块重建描述成宏块解码,这是因为在解码工作中,宏块重建确实占了相当大的比重,不过解码还包含其它的部分,按照解码流程可粗略分为: 读取 ...

  7. 动态追加js

    判断是否已引用js,如果没有会引发异常,在异常时添加引用 try { if (layui) {} } catch (ex) { var s = document.createElement('scri ...

  8. Codeforces Round #443 Div. 1

    A:考虑每一位的改变情况,分为强制变为1.强制变为0.不变.反转四种,得到这个之后and一发or一发xor一发就行了. #include<iostream> #include<cst ...

  9. 读取CSV到DataTable

    using System; using System.Collections.Generic; using System.Data; using System.Data.OleDb; using Sy ...

  10. Cetos 中添加bbr服务

    说明:此方法只适用于KVM架构的,OpenVZ平台无法使用: 一:安装bbr服务: # wget --no-check-certificate https://github.com/teddysun/ ...