传送门

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. 无法打开这些文件internet安全设置

    在安装别人传过来的软件的时候 出现这种情况 解决: 对这个程序,右键“属性”,可以看到属性窗口下方提示:此文件来自其它的电脑,可能不安全,后面有个按钮“解除锁定”

  2. f5创建monitor

  3. Django的Modelforms的介绍

    from django.forms import ModelForm class Test(ModelForm): # 把那张表转化成form组件 class Meta: # 这个意思即是把Artic ...

  4. easyui datagrid 三层嵌套

    代码: function local(role,region,ip){ $("#roleList").datagrid({ // title:'服务器监控列表', height:( ...

  5. String.format的用法

    有些时候,对于一些东西,不是没有简单的方法,而是我们没有接触到过 String.format();即创建格式化的字符串,里面有很多的通配使用符号,我这里说一下我接触到的,以后接触到其他的再填坑 它的内 ...

  6. node.js中对Event Loop事件循环的理解

    javascript是单线程的,所以任务的执行都需要排队,任务分为两种,一种是同步任务,一种是异步任务. 同步任务是进入主线程上排队执行的任务,上一个任务执行完了,下一个任务才会执行. 异步任务是不进 ...

  7. oracle数据库冷恢复

    场       景:客户的服务器是在虚拟机上,结果虚拟机的服务器的硬盘坏掉了.硬盘换掉后,系统成功恢复出来,但是登录虚拟机后,数据库无法启动. 解决方案:通过冷恢复将数据库还原.在自己的电脑上搭建一个 ...

  8. thinkphp两表联查并且分页

    ThinkPHP中关联查询(即多表联合查询)可以使用 table() 方法或和join方法,具体使用如下例所示: 1.原生查询示例: $Model = new Model(); $sql = 'sel ...

  9. taglib简介

    在 JSP最佳实践的 上一期,您学习了一种基于scriptlet的技术,这种技术被用来将上次修改的时间戳添加到JavaServer Page(JSP)文件中.不幸的是,比起它所提供的短期利益,scri ...

  10. (转)EasyUI 分页总结

      最近用到了easyui的分页和搜索栏功能,使用过程中由于运用不熟练导致其间也出现过一些问题,下面做个小结,供大家共同学习.1.首先使用EasyUI 的DataGrid分页,得加载其js类库:< ...