ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

『笔记』BSGS

2021-05-05 14:34:43  阅读:179  来源: 互联网

标签:lceil right int sqrt 笔记 BSGS rceil left


写在前面

开始之前先来两首 \(music\)

<iframe border="0" frameborder="no" height="10" marginheight="0" marginwidth="0" src="https://music.163.com/outchain/player?type=2&id=28590246&auto=0&height=66" width="430"> </iframe> <iframe border="0" frameborder="no" height="86" marginheight="0" marginwidth="0" src="//music.163.com/outchain/player?type=2&id=1826056264&auto=0&height=66" width="330"> </iframe>

简介

BSGS(baby-step giant-step),大步小步算法。

又被称为拔山盖世算法,又被称为北上广深算法。。。。

作用

求解

\[a^x \equiv b \pmod p \]

其中 \(a \perp p\) ,方程的解 \(x\) 满足 $ 0 \leq x < p$ 且数据范围较大,无法直接枚举在 \(O(p)\) 时间内通过。

\[x=A \left \lceil \sqrt{p} \right \rceil-B \]

其中

\[0 \leq A,B \leq \left \lceil \sqrt{p} \right \rceil \]

则有

\[a^{\left \lceil \sqrt{p} \right \rceil-B} \equiv b \pmod p \]

由费马小定理得

\[a^{\left \lceil \sqrt{p} \right \rceil} \equiv b \cdot a^B \pmod p \]

我们已知 \(a,b\) 的取值,所以直接枚举 \(B\),计算 \(b \cdot a^B\) ,将其插入 \(hash\) 表,然后计算 \(a^{A\left \lceil \sqrt{p} \right \rceil}\),枚举所有 \(A\) 的值,看 \(hash\) 表中是否存在对应的 \(b \cdot a^B\),即可得到所有的解 \(x\)。

由于 \(A,B\) 均小于 \(\leq \left \lceil \sqrt{p} \right \rceil\) 所以总时间复杂度为 \(O(\sqrt{p})\),若使用 \(map\) 则多一个 \(\log\) 。

例题

T1

计算

\[a^x \equiv b \pmod p \]

的最小非负整数解,无解时返回 \(-1\) 。

int BSGS(int a, int b, int p)
{
	map<int, int> h;
	b %= p;
	int t = (int)sqrt(p) + 1;
	for (int i = 1; i <= i; i++)
	{
		int tmp = (long long)b * Qpow(a, i, p) % p;
		h[tmp] = i;
	}
	a = Qpow(a, t, p);
	if (!a)
		return !b ? 1 : -1;
	for (int i = 0; i <= t; i++)
	{
		int tmp = Qpow(a, i, p);
		if (h.find(tmp) == h.end())
			return -1;
		else if (i * t - h[tmp] >= 0)
			return i * t - h[tmp];
	}
	return -1;
}

最后

掌握的不是很好哇,如果有错误欢迎向作者提出,蟹蟹!

标签:lceil,right,int,sqrt,笔记,BSGS,rceil,left
来源: https://www.cnblogs.com/Frather/p/14731630.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有