BZOJ5296 CQOI2018Day1T1 破解D-H协议 Description Diffie-Hellman密钥交换协议是一种简单有效的密钥交换方法.它可以让通讯双方在没有事先约定密钥(密码)的情况下 通过不安全的信道(可能被窃听)建立一个安全的密钥K,用于加密之后的通讯内容. 假定通讯双方名为Alice和Bob,协议的工作过程描述如下(其中mod表示取模运算): 1.协议规定一个固定的质数P,以及模P的一个原根g.P和g的数值都是公开的,无需保密. 2.Alice生成一个随机数a,并计…
题目分析: 裸题. 代码: #include<bits/stdc++.h> using namespace std; typedef long long ll; ; #define mp make_pair ll g,p; ll srt = ; vector<pair<]; ll fast_pow(ll now,ll pw){ ) return now; ll z = fast_pow(now,pw/); z *= z ; z %= p; )z *= now,z %= p; ret…
传送门 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(!isdigi…
[BZOJ5296][CQOI2018]破解D-H协议(BSGS) 题面 BZOJ 洛谷 Description Diffie-Hellman密钥交换协议是一种简单有效的密钥交换方法.它可以让通讯双方在没有事先约定密钥(密码)的情况下 通过不安全的信道(可能被窃听)建立一个安全的密钥K,用于加密之后的通讯内容. 假定通讯双方名为Alice和Bob,协议的工作过程描述如下(其中mod表示取模运算): 1.协议规定一个固定的质数P,以及模P的一个原根g.P和g的数值都是公开的,无需保密. 2.Ali…
BZOJ_5296_[Cqoi2018]破解D-H协议_BSGS Description Diffie-Hellman密钥交换协议是一种简单有效的密钥交换方法.它可以让通讯双方在没有事先约定密钥(密码)的情况下 通过不安全的信道(可能被窃听)建立一个安全的密钥K,用于加密之后的通讯内容. 假定通讯双方名为Alice和Bob,协议的工作过程描述如下(其中mod表示取模运算): 1.协议规定一个固定的质数P,以及模P的一个原根g.P和g的数值都是公开的,无需保密. 2.Alice生成一个随机数a,并…
传送门 解题思路 \(BSGS\)裸题??要求的是\(g^a =A (mod\) \(p)\),设\(m\)为\(\sqrt p\),那么可以设\(a=i*m-j\),式子变成 \[ g^{i*m-j}=A\mod p\] 然后把\(j\)移过去, \[g^{i*m}=A*g^j\mod p\] 然后可以预处理枚举\(j\)的值用哈希存下来,每次直接\(O(m)\)询问,总的时间复杂度为\(O(T\sqrt p \log)\) 代码 #include<iostream> #include<…
嘟嘟嘟 这不就是个bsgs板儿嘛. 顺便就复习了一下bsgs和哈希表. 头一次觉得我的博客这么好用,一下就懂了:数论学习笔记之高次不定方程 这里再补充几点: 1.关于这一段代码: int S = sqrt(c), p = 1; for(int i = 0; i < S; ++i) { if(p == b) return i + cnt; insert(1LL * p * b % c, i); p = 1LL * p * a % c; } for(int i = S, q = p; i - S +…
H - Hawawshi Decryption 对于一个给定的生成数列 R[ 0 ] 已知, (R[ i - 1 ] * a + b) % p = R[ i ] (p 是 质数), 求最小的 x 使得 R[ x ] = t 我们假设存在这样一个数列 S[ i ] = R[ i ] - v, 并且S[ i - 1] * a = S[ i ], 那么将S[ i ] = R[ i ] - v带入可得 v = b / (1-a) 那么我们能得到 R[ i ] = (R[ 0 ] - v) * a ^ n…
先谈一下BSGS算法(传送门) 但是上面这位的程序实现比较繁琐,看下面这位的. clover_hxy这样说 bsgs算法,又称大小步算法(某大神称拔山盖世算法). 主要用来解决 A^x=B(mod C)(C是质数),都是整数,已知A.B.C求x.(poj 2417 Discrete Logging) 具体步骤如下: 先把x=i*m-j,其中m=ceil(sqrt(C)),(ceil是向上取整). 这样原式就变为A^(i*m-j)=B(mod C), 再变为A^j×B=A^(m*i) (mod C…
链接 这题并不难只是需要把题读懂 - 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\…