2023.1.16[模板]BSGS/exBSGS
Posted fanghaoyu801212
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2023.1.16[模板]BSGS/exBSGS相关的知识,希望对你有一定的参考价值。
2023.1.16 [模板]BSGS/exBSGS
全称Boy Step Girl Step
给定一个质数 p,以及一个整数 a,一个整数 b,现在要求你计算一个最小的非负整数 l,
满足\\(a^x \\equiv b (mod p)\\)
算法流程
设t = \\(\\lceil \\sqrt p \\rceil\\) ,x = i * t - m (0\\(\\leq\\)i\\(\\leq\\)t , 0\\(\\leq\\)m\\(\\lt\\)t - 1)
$a^i * t - b \\equiv b $(mod p)
\\((a^t)^i \\equiv b * a^m\\) (mod p)
我们建立一个map,将b * \\(a^0\\) ~ b * \\(a^t - 1\\) 全部推进去,将值与指数建立映射关系,然后再枚举i,递推算出左式,判断map中是否有值,如果有值则返回答案ans = i * t - map[val]
时间复杂度O(\\(\\sqrt p\\))
inline int BSGS(int a,int b,int p)//a ^ x = b (% p)
map <int,int> q;
int t = sqrt(p);
for(int i = 0;i <= t - 1;i++)
q[(1ll * ksm(a,i,p) * b % p)] = i;
int c = ksm(a,t,p);
for(int i = 1;i <= t;i++)
int now = ksm(c,i,p);
if(q.find(now) != q.end())
int x = q[now];
return i * t - x;
return -1;
以上是关于2023.1.16[模板]BSGS/exBSGS的主要内容,如果未能解决你的问题,请参考以下文章
csdn最全的Linux常用指令详细解析[2023/1/16]
csdn最全的Linux常用指令详细解析[2023/1/16]
人工智能轨道交通行业周刊-第31期(2023.1.16-1.29)