大步小步(BSGS)算法学习笔记

这篇具有很好参考价值的文章主要介绍了大步小步(BSGS)算法学习笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

大步小步(Baby Step Giant Step)算法,可以在 \(O(\sqrt{p}\cdot f(p))\) 的时间复杂度内(\(f(p)\) 为一个大小为 \(p\) 的映射结构(如 map、hash table)进行单次读取 / 随机访问 的时间复杂度)内解下列关于 \(x\) 的方程(离散对数方程):

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

其中 \(\mathbf{p\in\mathbb{P},a\perp p}\)

思路

由于欧拉定理 \(a\perp p,a^{b}\equiv a^{b\bmod \varphi(p)}\pmod{p}\),可以得到:

\[a^{x \bmod (p-1)}\equiv a^{x}\pmod{p} \]

因此我们有一个 \(O(p)\) 的算法。但这还不够。

考虑以 \(B=O(\sqrt{p})\) 为块长分块,令解 \(x=iB-j\)。则:

\[\begin{aligned} &a^{iB+j}\equiv b\pmod{p}\\ &(a^{B})^{i}\div a^{j}\equiv b\pmod{p}\\ &\because a\perp p\\ &\therefore(a^{B})^{i}\equiv a^{j}b\pmod{p} \end{aligned} \]

然后,我们用一个映射结构记录一下 \(a^{j}\bmod p\) 对应的 \(j\)。然后枚举 \(i\) 找映射里有没有 \(((a^{B})^{i}\cdot b^{-1})\bmod p\) 即可。找逆元可以用费马小定理。

P3846 [TJOI2007] 可爱的质数/【模板】BSGS

模板题,不解释。文章来源地址https://www.toymoban.com/news/detail-467062.html

#include<bits/stdc++.h>
#define int long long
using namespace std;

int pow(int a,int b,const int &mod){
    int ans=1;
    for(;b;b>>=1,a=1ll*a*a%mod){
        if(b&1)ans=1ll*ans*a%mod;
    }
    return ans;
}
    
int BSGS(int a,int b,const int &p){
	int blk=sqrt(p);
	map<int,int> mmap;mmap[1]=0;
	int apw=1;
	for(int i=1;i<=blk;i++){
		apw=apw*a%p;
		mmap[apw]=i;
	}
	int pw=1,Q=pow(a,blk,p),invb=pow(b,p-2,p);
	for(int i=1;i<=blk;i++){
		pw=pw*Q%p;
		if(mmap.count(pw*invb%p)) return i*blk-mmap[pw*invb%p];
	}
	return -1;
}

signed main(){
	int p,b,n;
	cin>>p>>b>>n;
	int ret=BSGS(b,n,p);
	if(ret==-1) cout<<"no solution";
	else cout<<ret;
	return 0;
}

到了这里,关于大步小步(BSGS)算法学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 「学习笔记」BSGS

    点击查看目录 目录 「学习笔记」BSGS Baby-step Giant-step 问题 算法 例题 Discrete Logging 代码 P3306 [SDOI2013] 随机数生成器 思路 P2485 [SDOI2011]计算器 思路 Matrix 思路 代码 在 (O(sqrt{p})) 的时间内求解 [a^x equiv b pmod p] 其中 (aperp p) ,方程的解 (x) 满足 (0 le x p) 。 首先根据费马小

    2023年04月10日
    浏览(20)
  • 【读书笔记-MIT决策算法】1.简介

    目录  1.1 决策(Decision Making) 1.2 应用 1.2.1 飞行器防撞 1.2.2 自动驾驶 1.2.3 乳腺癌筛查 1.2.4 金融消费与投资组合配置 1.2.5 分布式野火监测 1.2.6 火星科学探索 1.3 方法 1.3.1 显式编程 1.3.2 监督学习 1.3.3 优化理论 1.3.4 规划 1.3.5 强化学习 1.4 历史发展 1.4.1 经济学 1.4.2 心理学 1

    2023年04月08日
    浏览(27)
  • PCIE 学习笔记(入门简介)

    书到用时方恨少啊,一年前学PCIE的笔记,再拿出来瞅瞅。发到博客上,方便看。 PCIE和PCI的不同 PCIE采用差分信号传输,并且是dual-simplex传输——每条lane上有TX通道和RX通道,所以每条lane上的信号是4条。PCI是同步时钟、并行传输。 PCIE是端到端的传输,一条链路上只能有两个

    2024年02月06日
    浏览(60)
  • Kafka 简介 + 学习笔记

    先说明消息队列是什么: 亚马逊: 消息队列是一种异步的服务间通信方式,适用于微服务架构。消息在被处理和删除之前一直存储在队列上。每条消息仅可被一位用户处理一次。消息队列可被用于分离重量级处理、缓冲或批处理工作以及缓解高峰期工作负载。 我的理解:

    2024年02月11日
    浏览(21)
  • 主流深度学习算法简介

    ** 1、 深度学习主流算法包括: 1.1 CNN (卷积神经网络) 卷积神经网络(CNN)是最常见的深度学习方法之 一。自20 世纪80 年代后期以来,CNN 已应用于视觉识别与分类任务,特别是LeCun 等在1998 年提出了LeNet-5,基于CNN 的相关研究随即成为研究热点,伴随图形处理(Graphical Processi

    2024年02月07日
    浏览(30)
  • 机器学习笔记 - 局部敏感哈希简介

            局部敏感散列  (LSH) 技术,可显著加快对数据的邻居搜索或近似重复检测。例如,这些技术可用于以惊人的速度过滤掉抓取网页的重复项,或者从地理空间数据集中对附近点执行近恒定时间查找。          让我们快速回顾一下其他类型的哈希函数,哈希函

    2024年02月12日
    浏览(40)
  • AC695x学习笔记(1): 简介

    目录 前言 一、板级配置 二、常规功能配置 1.功能app模式配置 2.串口(uart)调试信息输出配置 3.系统配置 4.音频Audio配置 4.其他配置 最近在学习和使用杰理的AC695x系列的芯片,在平时的学习和调试中也会经常遇到不少的问题点,且为了防止后续遗忘,故用博客方式进行记录,也

    2024年02月10日
    浏览(33)
  • NLP学习笔记——情感分析一 (简介)

    目录 一、什么是情感分析  二、研究现状及存在问题 1、研究现状 (1). 传统情感分类方法 (2). 短文本情感分类方法 (3). 基于深度学习的方法  2、存在问题 (1). 文化差异 (2).情感词典无法覆盖全部情感词汇 (3). 语义相似不等于情感相似 三、情感分析的应用         情感分析又

    2023年04月08日
    浏览(29)
  • Python爬虫学习笔记(二)————爬虫简介

    目录 1.爬虫概念 2.爬虫核心 3.爬虫分类  通用爬虫 聚焦爬虫 4.反爬手段 (1)User‐Agent (2)代理IP (3)验证码访问 (4)动态加载网页 (5)数据加密 1.爬虫概念 通过一个程序,根据Url(http://www.taobao.com)进行爬取网页,获取有用信息。 使用程序模拟浏览器,去向服务器发送

    2024年02月15日
    浏览(33)
  • SQLite 学习笔记1 - 简介、下载、安装

    SQLite是一款非常轻量级的关系数据库系统,支持多数SQL92标准。SQLite 是世界上使用最广泛的数据库引擎。SQLite 内置于所有手机和大多数计算机中,并捆绑在人们每天使用的无数其他应用程序中。 SQLite 是一个由C语音开发的嵌入式库,具有小型、快速、自包含、高可靠、功能齐

    2024年02月07日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包