链接

这题并不难只是需要把题读懂 — By ShadderLeave

一句话题意

给定两个数 \(p\)和\(g\),有\(t\)组询问,每组询问给出\(A\)和\(B\)

其中 A = \(g^a \bmod p\) B = \(g^b \bmod p\)

问你\(g^{ab} \bmod p\)是多少。

初步解法就是用BSGS求出每个\(a\),\(b\)在用快速幂算出\(g^{ab} \bmod p\)

可实际上你就会发现只要算一个就行。

算出\(a\)直接求出\(B^a \bmod p\)就是答案

然鹅,就这样交上去你就会狂TLE

所以,我们只能再考虑优化。

每次询问,我们都会把map清空,并重新储存,但这样会浪费很多时间,那我们从这开始优化

我们要求的是这个柿子 \(g^a \equiv A\)

我们利用BSGS的思想可以把它化为 \(g^{kt+b} \equiv A\)

也就是\(g^{kt} \equiv A \times g^B\)

发现方程右边会随A的取值发生变化,但左边的g和t确定了,那么值就不会变。

所以,我们可以预先处理出\(g^{kt}\)并把他插入map中。

对于每组询问,枚举\(A \times g^j\) 看在map中是否出现过。

如果出现过,答案就是 map中的存的幂指数 - \(j\)

但有一个很大的问题就是:

卡 。。。常 。。。。

卡。。。。。常。。。。

卡。。。。。。常。。。。。

毒瘤出题人nmsl

所以我们只能少用快速幂,再求\(g^{kt}\)以及\(g^j\)只能用累乘的方法来求。

出题人我*****

代码


#include<iostream>
#include<cstdio>
#include<algorithm>
#include<map>
#include<cmath>
using namespace std;
#define LL long long
int g,t,p,A,B;
map<LL,int> hash;
inline LL read()
{
LL s = 0, w = 1; char ch = getchar();
while(ch < '0' || ch > '9'){if(ch == '-') w = -1; ch = getchar();}
while(ch >= '0' && ch <= '9'){s= s * 10+ch - '0'; ch = getchar();}
return s * w;
}
LL ksm(LL a,LL b)
{
LL res = 1;
for(; b; b >>= 1)
{
if(b & 1) res =res * a % p;
a = a * a % p;
}
return res;
}
void YYCH()//预处理出g^kt
{
LL t = sqrt(p) + 1;
LL base = ksm(g,t); LL tmp = 1;
for(int i = 1; i <= t; i++)
{
tmp = tmp * base % p;//累乘避免被卡常
hash[tmp] = i * t;
}
}
LL BSGS(int k)
{
LL t = sqrt(p) + 1; LL tmp = k;
if(hash[tmp]) return hash[tmp];
for(int i = 1; i < t; i++)//枚举A*g^j
{
tmp = tmp * g % p;
if(hash[tmp]) return hash[tmp] - i;
}
// return -1;
}
int main()
{
g = read(); p = read(); t = read(); YYCH();
while(t--)
{
A = read(); B = read();
printf("%lld\n",ksm(B,BSGS(A)));
}
return 0;
}

我拿出我珍藏多年的卡常火车头,出题人(17张牌你能秒杀我)你要是能卡住我,我当场把屏幕吃掉。

呜呜,我错了,放过我吧,不要再卡我了。

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

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

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

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

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

  3. [CQOI2018]破解D-H协议

    嘟嘟嘟 这不就是个bsgs板儿嘛. 顺便就复习了一下bsgs和哈希表. 头一次觉得我的博客这么好用,一下就懂了:数论学习笔记之高次不定方程 这里再补充几点: 1.关于这一段代码: int S = sq ...

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

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

  5. 2018.12.18 bzoj5296: [Cqoi2018]破解D-H协议(bsgs)

    传送门 bsgsbsgsbsgs基础题. 考虑到给的是原根,因此没无解的情况. 于是只需要每次把a,ba,ba,b解出来. 然后可以通过预处理节省一部分时间. 代码: #include<bits ...

  6. LG4454 【[CQOI2018]破解D-H协议】

    先谈一下BSGS算法(传送门) 但是上面这位的程序实现比较繁琐,看下面这位的. clover_hxy这样说 bsgs算法,又称大小步算法(某大神称拔山盖世算法). 主要用来解决 A^x=B(mod C ...

  7. BZOJ 5296: [Cqoi2018]破解D-H协议(BSGS)

    传送门 解题思路 \(BSGS\)裸题??要求的是\(g^a =A (mod\) \(p)\),设\(m\)为\(\sqrt p\),那么可以设\(a=i*m-j\),式子变成 \[ g^{i*m-j ...

  8. 破解使用SMB协议的Windows用户密码:acccheck

    一.工作原理 Acccheck是一款针对微软的SMB协议的探测工具(字典破解用户名和密码),本身不具有漏洞利用的能力. SMB协议:SMB(Server Message Block)通信协议主要是作为 ...

  9. noip考前抱佛脚 数论小总结

    exCRT 求解韩信点兵问题,常见的就是合并不同\(mod\). 先mo一发高神的板子 for(R i=2;i<=n;++i){ ll Y1,Yi,lcm=Lcm(p[i],p[1]); exg ...

随机推荐

  1. vue打包之后找不到图片路径,打包项目时,dist文件夹内部分图片找不到

    1.打包项目时,会默认把存放在public内的小于4k的图片转换成base64,作为内联样式. 可以在vue.config.js中修改默认大小,在chainWepack:config=>{}中添 ...

  2. Unity - NGUI - 优化ScrollView的一些心的

    ScrollView是NGUI非常好用的一个内置组件,但是效率不好,当子物体过多的时候,一旦开始拖动就帧数狂掉,我目前有3个解决思路: 1. NGUI自带的Example 8 - Scroll Vie ...

  3. C# Chart各个属性详细解析、应用

    Chart笔记 前台页面代码: <form id="form1" runat="server"> <div> <asp:Chart ...

  4. python3笔记-读取ini配置文件

    在代码中经常会通过ini文件来配置一些常修改的配置.下面通过一个实例来看下如何写入.读取ini配置文件. 需要的配置文件是: [path] back_dir = /Users/abc/PycharmP ...

  5. CodeForces - 1114D-Flood Fill (区间dp)

    You are given a line of nn colored squares in a row, numbered from 11 to nn from left to right. The  ...

  6. 深入了解Netty【一】BIO、NIO、AIO简单介绍

    引言 在Java中提供了三种IO模型:BIO.NIO.AIO,模型的选择决定了程序通信的性能. 1.1.使用场景 BIO BIO适用于连接数比较小的应用,这种IO模型对服务器资源要求比较高. NIO ...

  7. Codeforces 1324F Maximum White Subtree DFS

    题意 给你无根一颗树,每个节点是黑色或白色.对于每一个节点,问包含该节点的权值最大的子树. 子树的权值等于子树中白点的个数减去黑点的个数. 注意,这里的子树指的是树的联通子图. 解题思路 这场就这题卡 ...

  8. Istio 的配置分析

    Istio 的配置分析 目录 Istio 的配置分析 Analyzer 的消息格式 ConflictingMeshGatewayVirtualServiceHosts 问题解决 举例 Conflict ...

  9. 前端code导入excel

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. python3之print()函数

    print语法格式 print()函数具有丰富的功能,详细语法格式如下: print(value, -, sep=' ', end='\n', file=sys.stdout, flush=False ...