题目

https://www.luogu.com.cn/problem/P4454

杂题乱做ing...

思路

首先我们把式子列一下:

\(g^a\equiv A(mod P)\)

\(g^b\equiv B(mod P)\)

求\(g^{ab}\)

g是原根,那是不是要用到一些高妙的数论性质呀。。。然后我们看一眼式子,发现只要把\(a\)和\(b\)求出来就行了,也就是求\(A\)和\(B\)在模\(P\)意义下的离散对数。

这不就是个BSGS裸题嘛,为什么能评成紫题啊。。。

代码(伪)

点击查看代码
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<map>
#define ll long long
using namespace std;
map<int,int> H;
ll kasumi(ll x,ll p,ll m){
ll ans=1,base=x;
for(;p;p>>=1){
if(p&1) ans=ans*base%m;
base=base*base%m;
}
return ans;
}
ll BSGS(ll a,ll b,ll p){
int i;
H.clear();
ll k=(ll)(sqrt(p)+1);
ll ak=1;
H[b]=0;
for(i=1;i<k;++i){
ak=ak*a%p;
H[(int)(ak*b%p)]=i;
}
ak=ak*a%p;
ll t=1;
for(i=1;i<=k;++i){
t=t*ak%p;
if(H.count((int)t)){
int z=H.find((int)t)->second;
return i*k-z;
}
}
}
int main(){
int T;
ll g,P;
ll a,b,A,B;
ll ans;
scanf("%lld%lld",&g,&P);
scanf("%d",&T);
while(T--){
scanf("%lld%lld",&A,&B);
a=BSGS(g,A,P);
b=BSGS(g,B,P);
ans=kasumi(g,a*b%(P-1),P);
printf("%lld\n",ans);
}
// system("pause");
return 0;
}

喜闻乐见卡map,然后我们自己写个哈希表,这题就水完了。

代码(真)

点击查看代码
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#define ll long long
#define zzd 233333
using namespace std;
struct Hashmap{
int fst[zzd],nxt[1<<16],cnt;
struct data{
int x,y;
} d[1<<16];
void clear(){
cnt=0;
memset(fst,0,sizeof(fst));
memset(nxt,0,sizeof(nxt));
}
int insert(int t1,int t2){
d[++cnt].x=t1;
d[cnt].y=t2;
nxt[cnt]=fst[t1%zzd];
fst[t1%zzd]=cnt;
}
int find(int t){
int i=fst[t%zzd];
while(i&&d[i].x!=t) i=nxt[i];
if(i) return d[i].y;
else return -1;
}
} H;
ll kasumi(ll x,ll p,ll m){
ll ans=1,base=x;
for(;p;p>>=1){
if(p&1) ans=ans*base%m;
base=base*base%m;
}
return ans;
} ll BSGS(ll a,ll b,ll p){
int i;
H.clear();
ll k=(ll)(sqrt(p)+1);
ll ak=1;
H.insert(b,0);
for(i=1;i<k;++i){
ak=ak*a%p;
H.insert((int)(ak*b%p),i);
}
ak=ak*a%p;
ll t=1;
for(i=1;i<=k;++i){
t=t*ak%p;
int z=H.find((int)t);
if(z>=0) return i*k-z;
}
}
int main(){
int T;
ll g,P;
ll a,b,A,B;
ll ans;
scanf("%lld%lld",&g,&P);
scanf("%d",&T);
while(T--){
scanf("%lld%lld",&A,&B);
a=BSGS(g,A,P);
b=BSGS(g,B,P);
ans=kasumi(g,a*b%(P-1),P);
printf("%lld\n",ans);
}
// system("pause");
return 0;
}

洛谷 P4454 [CQOI2018]破解D-H协议的更多相关文章

  1. P4454 [CQOI2018]破解D-H协议

    链接 这题并不难只是需要把题读懂 - By ShadderLeave 一句话题意 给定两个数 \(p\)和\(g\),有\(t\)组询问,每组询问给出\(A\)和\(B\) 其中 A = \(g^a ...

  2. 洛谷P4462 [CQOI2018]异或序列(莫队)

    题意 题目链接 Sol 一开始以为K每次都是给出的想了半天不会做. 然而发现读错题了维护个前缀异或和然后直接莫队搞就行,. #include<bits/stdc++.h> #define ...

  3. 洛谷P4358密钥破解 [CQOI2016] 数论

    正解:数论 解题报告: 先,放个传送门QwQ 这题难点可能在理解题意,,, 所以我先放个题意QAQ 大概就是说,给定一个整数N,可以被拆成两个质数的成绩p*q,然后给出了一个数e,求d满足e*d=1( ...

  4. 洛谷P4462 [CQOI2018]异或序列(莫队)

    打广告->[这里](https://www.cnblogs.com/bztMinamoto/p/9538115.html) 我蠢了…… 如果$a_{l} xor ...a_{r}=k$,那么只要 ...

  5. 洛谷4455 [CQOI2018]社交网络 (有向图矩阵树定理)(学习笔记)

    sro_ptx_orz qwq算是一个套路的记录 对于一个有向图来说 如果你要求一个外向生成树的话,那么如果存在一个\(u\rightarrow v\)的边 那么\(a[u][v]--,a[v][v] ...

  6. 树链剖分模板(洛谷P3384)

    洛谷P3384 #include <bits/stdc++.h> #define DBG(x) cerr << #x << " = " < ...

  7. 洛谷 P2764 LibreOJ 6002 最小路径覆盖问题

    题目描述 «问题描述: 给定有向图G=(V,E).设P 是G 的一个简单路(顶点不相交)的集合.如果V 中每个顶点恰好在P 的一条路上,则称P是G 的一个路径覆盖.P 中路径可以从V 的任何一个顶点开 ...

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

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

  9. 洛谷 P1784 数独[DFS/回溯]

    To 洛谷.1784 数独类似题:CODEVS.4966 简单数独(4*4数独) CODEVS.2924 数独挑战) 题目描述 数独是根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行 ...

  10. 洛谷P1538迎春舞会之数字舞蹈

    题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...

随机推荐

  1. 设计模式 > 单一职责原则

    SOLID原则并非单纯的1个原则,而是由5个设计原则组成的,它们分别是单一职责原则,开闭原则,里氏替换原则,接口隔离原则和依赖反转原则. 单一职责原则(SRP) 定义:一个类或者模块只负责完成一个职责 ...

  2. 新的学习历程-python1 Hello World

    1 print('hello world!') 2 if 2 > 0: 3 print('ok') 4 print('yes') 5 6 x = 3; y = 4 7 print(x + y) ...

  3. win7电脑休眠后只能按重启键解决办法

    一.点击"开始"后选择控制面板 二.选择"电源选项" 三.点击"更改计划设置" 四.选择"更改高级电源设置" 五.点击& ...

  4. 2022-05-12内部群每日三题-清辉PMP

    1.项目团队成员将因积极工作和满足项目成本目标而获得奖励.高级经理向项目经理询问团队成员的可用性和旅行偏好,项目经理可以在哪里获得奖励的定义标准和频率? A.责任分配矩阵(RAM) B.项目管理计划 ...

  5. shell 脚本请求接口报错

    2023-01-18 22:07:07.984 WARN 11700 --- [io-9044-exec-10] .w.s.m.s.DefaultHandlerExceptionResolver : ...

  6. Chrome浏览器提示您的连接不是私密连接解决办法

    解决方案: 是在当前页面用键盘输入 thisisunsafe ,不是在地址栏输入,就直接敲键盘就行了,页面即会自动刷新进入网页. 原因: 因为Chrome不信任这些自签名ssl证书,为了安全起见,直接 ...

  7. java工厂方法模式学习

    简单工厂模式又称为静态工厂模式,实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例.简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体 ...

  8. Mysql 无法使用注释 带注释执行报错 Dbeaver

    一.场景 执行时,前面带一段注释,在dbeaver执行报语法错误 二.解决办法 在注释后面插入一个空格,识别注释后变成灰色,执行成功

  9. 性能测试-IO密集型-直接会话可能会断了,命令执行不了

    1.IO密集型模拟命令 该命令会开启1个worker不停的读写临时文件,同时启动6个workers不停的调用sync系统调用提交缓存 stress-ng -i 6 --hdd 1 --timeout ...

  10. 在 Vue 项目中使用 MQTT

    Vue 是一款由尤雨溪及其团队开发的渐进式 Javascript 前端框架.该框架具备数据双向绑定.组件化.响应式和轻量等特点,搭配其脚手架 Vue CLI 使得开发者更加容易上手,大大减少了学习成本 ...