传送门

bsgsbsgsbsgs基础题。


考虑到给的是原根,因此没无解的情况。

于是只需要每次把a,ba,ba,b解出来。

然后可以通过预处理节省一部分时间。

代码:

#include<bits/stdc++.h>
#include<tr1/unordered_map>
#define ri register int
using namespace std;
inline int read(){
	int ans=0;
	char ch=getchar();
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
	return ans;
}
typedef long long ll;
inline int ksm(int a,int p,int mod){int ret=1;for(;p;p>>=1,a=(ll)a*a%mod)if(p&1)ret=(ll)ret*a%mod;return ret;}
int g,p,sqr,inv;
tr1::unordered_map<int,int>S;
inline void init(int a,int mod){
	sqr=ceil(sqrt(mod)),inv=ksm(a,mod-2,mod),a=ksm(a,sqr,mod);
	for(ri i=0,mul=1;i<=mod/sqr;++i,mul=(ll)mul*a%mod)S[mul]=i?i:sqr;
}
inline int query(int b,int mod){for(ri i=0,mul=b;i<sqr;++i,mul=(ll)mul*inv%mod)if(S[mul])return (S[mul])%sqr*sqr+i;}
int main(){
	int n,g,p;
	g=read(),p=read(),init(g,p);
	for(ri tt=read(),a,b;tt;--tt){
		a=query(read()%p,p),b=query(read()%p,p);
		cout<<ksm(ksm(g,a,p),b,p)<<'\n';
	}
	return 0;
}

2018.12.18 bzoj5296: [Cqoi2018]破解D-H协议(bsgs)的更多相关文章

  1. BZOJ5296 CQOI2018 破解D-H协议 【BSGS】

    BZOJ5296 CQOI2018Day1T1 破解D-H协议 Description Diffie-Hellman密钥交换协议是一种简单有效的密钥交换方法.它可以让通讯双方在没有事先约定密钥(密码) ...

  2. BZOJ5296 [CQOI2018] 破解D-H协议 【数学】【BSGS】

    题目分析: 裸题. 代码: #include<bits/stdc++.h> using namespace std; typedef long long ll; ; #define mp ...

  3. 2018.12.18 bzoj2242: [SDOI2011]计算器(数论)

    传送门 数论基础题. 对于第一种情况用快速幂,第二种用exgcdexgcdexgcd,第三种用bsgsbsgsbsgs 于是自己瞎yyyyyy了一个bsgsbsgsbsgs的板子(不知道是不是数据水了 ...

  4. flask 小知识总结 2018.12.18

    Visual Studio Code 1.自定义python组建,方便某功能和代码的便捷操作 文件--首选项--用户代码片段--python.json--自定义需要的代码和功能 2.自定义快捷键方法 ...

  5. BZOJ_5296_[Cqoi2018]破解D-H协议_BSGS

    BZOJ_5296_[Cqoi2018]破解D-H协议_BSGS Description Diffie-Hellman密钥交换协议是一种简单有效的密钥交换方法.它可以让通讯双方在没有事先约定密钥(密码 ...

  6. 2018.12.1 Test

    目录 2018.12.1 Test A 串string(思路) B 变量variable(最小割ISAP) C 取石子stone(思路 博弈) 考试代码 B C 2018.12.1 Test 题目为2 ...

  7. loli的测试-2018.12.9

    模拟赛-2018.12.9 这是NOIP之后第一次模拟赛...但是考的比较悲惨. 非常喜欢写考试总结,不知道为什么... T1:https://www.luogu.org/problemnew/sho ...

  8. Sprint3(12.18)总结

    Sprint3第三阶段 1.类名:软件工程-第三阶段 2.时间:至12.18 3.选题内容:web版-餐厅到店点餐系统 4.团队博客地址: http://www.cnblogs.com/queenju ...

  9. PowerDesigner 12.5 汉化破解完整版

    PowerDesigner 12.5 汉化破解完整版 分类: ⑦ 综合 2011-08-09 14:59 2979人阅读 评论(0) 收藏 举报 破解wizardsybasetoolsshell扩展 ...

随机推荐

  1. TOJ 4383 n % ( pow( p , 2) ) ===0

    传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=4383 描述 There is a ...

  2. chase

    chase 英[tʃeɪs] 美[tʃes] vt. 追求; 追捕; 追寻; 镂刻; n. 追捕; 打猎; 猎物(指鸟兽等); 槽; vi. 追逐,追赶; 追寻; 追求(常与after连用); [口语 ...

  3. 对stm32f373XX的startup.s的文件的分析

    ;******************** (C) COPYRIGHT 2012 STMicroelectronics ********************;* File Name : start ...

  4. HDU 6214 Smallest Minimum Cut(最少边最小割)

    Problem Description Consider a network G=(V,E) with source s and sink t. An s-t cut is a partition o ...

  5. 【网络编程三】网络通信之多进程(线程)实现TCP通信(一)

    [多进程] [多线程] /************************************************************************* > File sum ...

  6. Android Studio 运行shell

    public void RunCmd(String mycmd) { Process su = null; try { su = Runtime.getRuntime().exec("su& ...

  7. BitCoinCore配置文件解读

    bitcoin.conf 配置文件 除了 -datadir 和 -conf 以外的所有命令行参数都可以通过一个配置文件来设置,而所有配置文件中的选项也都可以在命令行中设置.命令行参数设置的值会覆盖配置 ...

  8. three.js raycaster射线碰撞的坑 (当canvas大小 不是屏幕大小是解决拾取物体的办法)

    这里只是记录一下坑,方便查阅,内容主要援引自:three.js Raycaster 射线拾取 canvas不占满整屏时射线拾取存在偏差 1. 世界坐标系: 世界坐标系位于屏幕的中心(0,0,0),往右 ...

  9. encode/decode/bytes

    python3中如何将字符型转换成utf-8格式的bytes类型 str_me = '字符是我'.encode('utf-8') print(str_me) >>:b'\xe5\xad\x ...

  10. andorid 练习微信登陆

    AndroidManifest.xml layout1.xml <?xml version="1.0" encoding="utf-8"?> < ...