最新要闻
- 机会越来越好-与君周末谈20230604
- 虚幻5国漫巅峰 《斗罗大陆》比比东成神 巨型镰刀秒杀唐三
- 甚至没动工!《赛博朋克2077》续作明年才将投入开发 播资讯
- 我的脸被隐翅虫毁容了!千万小心“会飞的硫酸”
- 积成电子:预中标1.05亿元国家电网采购项目_世界新消息
- 全球微资讯!时速133严重车祸 车主:感谢驱逐舰05救我一命 又买了辆比亚迪汉
- 环球热文:马斯克北京首日晚宴多少钱?22人“吃”掉4.5万元
- CPU的功能是什么_cpu的主要功能
- 网友把苹果封死水里一年 打开后水面飘了一层“巧克力”|每日时讯
- PS造假神了!_热点评
- 小娜再见!微软宣布:Win10、Win11将正式抛弃Cortana 全球热点
- 观点:不打算修!AMD EPYC Rome服务器芯片运行1044天必定死机
- 全球量产车最低风阻!昊铂Hyper GT本月上市:能耗比Model 3还低|视点
- 世界最牛计算机课程变样了:接受AI改造
- 姑姑拍到侄女做梦吃雪糕:画面分分钟萌翻
- 今头条!比亚迪突然上调车辆保养价格 部分车型涨幅达50%
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
世界热门:(ex)BSGS/(扩展)大步小步算法 学习笔记
(ex)BSGS/(扩展)大步小步算法 学习笔记
在即将暂时退役之际杀掉了P4195的毒瘤模板题,于是来写篇学习笔记。
(相关资料图)
谨此为我初中三年摆烂的OI生涯画上一个句号。(距离中考还有20天!)
BSGS
link
求\(a^x\equiv b\pmod p\)的非负整数解,其中\(a, p\)互质。
算法思路
我们不妨令\(t=\lceil{\sqrt{p}\rceil}\),\(j\lt t\),\(i\leq t\)
原式转化为\(a^{it-j} \equiv b \pmod p\)
即 \(\left(a^t\right)^i\equiv b\cdot a^j \pmod p\)
于是我们可以这么在\(\Theta\left(\sqrt{n}\right)\)(不考虑hash表)内求出解:
枚举\(j \in [0, t)\),求出所有的\(b\cdot a^j \mod p\),用hash表记录下来
枚举\(i \in [0, t]\),求出所有的\(\left(a^t\right)^i \mod p\),在hash表中查找是否有对应的\(j\)值
需要注意的是,当\(a^t \mod p=0\)时,若\(b=0\),则解为\(x=1\);否则无解。
正确性讨论
由Euler定理,我们有\(a^{\varphi\left(p\right)}\equiv 1\pmod p\),其中\(\varphi\left(x\right)\)为Euler函数。
也就是说,\(\mod p\)意义下,\(a^x\mod p\)在\(x=n\cdot\varphi\left(p\right)\)(\(n\)遍历非负整数)后循环。
我们知道对于任意整数\(x \gt 1\),\(x>\varphi\left(x\right)\),而我们取的\(it-j\)可以遍历\([0, x]\),因此能够取到\(a^x \mod p\)的一切情况,故一定不会漏解。
代码实现
#include using namespace std;#define int long longint qpow(int a, int n, int p) { a%=p; int res=1; while (n) { if (n&1) res=res*a%p; a=a*a%p; n>>=1; } return res;}signed bsgs(int a, int b, int p) { b%=p; int t=sqrt(p)+1; unordered_map hash; hash.clear(); for (int j=0; j=0 && i*t-j>=0) return i*t-j; } return -1;}signed main() { int a, b, p; cin>>p>>a>>b; int res=bsgs(a,b,p); if (res==-1) puts("no solution"); else cout<
这份代码是可以通过P3846的。我们可以考虑对它进行优化。
我们发现枚举\(a^j\)和\(\left(a^t\right)^i\)的时候,\(i, j\)是递增的,于是我们可以直接用一个变量来维护\(a^j\)和\(\left(a^t\right)^i\)。
另外,用unordered_map
来实现hash表似乎会快一些。
inline int bsgs(int a, int b, int p) { int t=(int)(sqrt(p))+1; unordered_map h; h.clear(); int powa=1; for (reg int j=0; j=0 && i*t-j>=0) return i*t-j; powa=powa*a%p; } return -1;}
为exBSGS进行修改
我们现在来考虑\(ka^x\equiv b\pmod p\)(\(a, p\)互质,\(k\)为正整数)的式子,我们可以同样地将它们变形为
\[k\cdot \left(a^t\right)^i\equiv b\cdot a^j \pmod p\]于是稍微修改一下上述代码就可以了。
inline int bsgs(int a, int b, int k, int p) { int t=(int)(sqrt(p))+1; unordered_map h; h.clear(); int powa=1; for (reg int j=0; j=0 && i*t-j>=0) return i*t-j; powa=powa*a%p; } return -1;}
exBSGS
link
求\(a^x\equiv b\pmod p\)的非负整数解,其中\(a, p\)未必互质。
算法思路
考虑利用同余式的约化性质,转换成朴素的BSGS
来求解。
我们有如下同余式的约化性质:若\(a\equiv b\pmod p\),\(d\mid a,d \mid b\),则
\(\frac{a}{d}\equiv\frac{b}{d}\pmod {\frac{p}{\gcd(d,p)}}\)
我们回到\(a^x\equiv b\pmod p\),令\(d_1=\gcd(a,p)\),当\(d_1 \mid b\),我们可以变形为\(\frac{a}{d_1}\cdot a^{x-1}\equiv \frac{b}{d_1} \pmod {\frac{p}{d_1}}\)(若\(d_1 \nmid b\),立刻得出无解)若\(a,\frac{p}{d_1}\)仍不互质,我们可以继续令\(d_2=\gcd(a,\frac{p}{d_1})\),\(\cdots\),直到\(a,\frac{p}{d_1d_2\cdots d_k}\)互质为止。
我们设一共进行了\(k\)次约化,\(D=d_1d_2\cdots d_k\)(此时\(a\),\(\frac{p}{D}\)互质),原式可变形为
\(\frac{a^k}{D}\cdot a^{x-k} \equiv \frac{b}{D} \pmod {\frac{p}{D}}\)
我们令\(k=\frac{a^k}{D}, X=x-k, B=\frac{b}{D}, P=\frac{p}{D}\),即
\(ka^X\equiv B \pmod P\)
于是可以利用修改后的BSGS
算法来求解。
注意求解之后得到\(X=x-k\),故\(x=X+k\)。
Trick
\(\frac{a^k}{D}=\frac{a}{d_1}\frac{a}{d_2}\cdots\frac{a}{d_k}\),于是可以在每一个循环内单独计算。
用cout<<"\n"
似乎会比用cout<
可以预先将b%=p, a%=p
,若取模过后\(b==1\)或者\(p==1\),那么显然\(x=0\)为解。
我们记\(D_k=\frac{a}{d1}\frac{a}{d2}\cdots \frac{a}{d_k}\),当\(\frac{a^k}{D^k}==\frac{b}{D_k}\)时,有
\[\frac{a^k}{D_k}\cdot a^{x-k}\equiv \frac{b}{D_k}\pmod {\frac{p}{D_k}}\]即
\[a^{x-k}\equiv 1\pmod {\frac{p}{D_k}}\]于是\(x=k\)为解。其中\(k\)是正在进行的第\(k\)次约化。
代码实现
#include using namespace std;#define int long long#define reg registerinline int qpow(int a, int n, int p) { a%=p; int res=1; while (n) { if (n&1) res=res*a%p; a=a*a%p; n>>=1; } return res;}inline int bsgs(int a, int b, int k, int p) { int t=(int)(sqrt(p))+1; unordered_map h; h.clear(); int powa=1; for (reg int j=0; j=0 && i*t-j>=0) return i*t-j; powa=powa*a%p; } return -1;}inline int exbsgs(int a, int b, int p) { a%=p, b%=p; if (b==1 || p==1) return 0; int A=a, NA=1, B=b, P=p, k=0, D=1; while (__gcd(a,P)>1) { int d=__gcd(a,P); if (B%d) return -1; k++; A/=d, B/=d, P/=d, NA=NA*(a/d)%P, D=D*d%P; if (NA==B) return k; // NA就是上文提到的(a^k)/(D^k) } int res=bsgs(a,B,NA,P); if (res==-1) return res; if ((qpow(a,res+k,p)-b)%p) return -1; return res+k;}signed main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int a, b, p; while (cin>>a>>p>>b && a) { int res=exbsgs(a,b,p); if (res==-1) cout<<"No Solution\n"; else cout<
Record,\(2.46\rm{s}\),可以通过本题(包括Hack数据)。
后记
这道题算是比较毒瘤的,我是一共调了三天才过的(我太弱了)还有\(20\)天就要中考了,而我还在这摸鱼(悲)就谨此纪念一下我的初中OI生涯罢。
顺便在此祝福向宴酱中考顺利!
关键词:
世界热门:(ex)BSGS/(扩展)大步小步算法 学习笔记
机会越来越好-与君周末谈20230604
虚幻5国漫巅峰 《斗罗大陆》比比东成神 巨型镰刀秒杀唐三
甚至没动工!《赛博朋克2077》续作明年才将投入开发 播资讯
我的脸被隐翅虫毁容了!千万小心“会飞的硫酸”
积成电子:预中标1.05亿元国家电网采购项目_世界新消息
全球微资讯!时速133严重车祸 车主:感谢驱逐舰05救我一命 又买了辆比亚迪汉
环球热文:马斯克北京首日晚宴多少钱?22人“吃”掉4.5万元
Web安全-渗透测试-基础知识01 世界播资讯
【天天速看料】Leetcode 1156. 单字符重复子串的最大长度
CPU的功能是什么_cpu的主要功能
网友把苹果封死水里一年 打开后水面飘了一层“巧克力”|每日时讯
PS造假神了!_热点评
读改变未来的九大算法笔记03_纠错码
当前报道:《安富莱嵌入式周报》第314期:微软推出开源DeviceScript编程语言适合低资源单片机,开源色度计,超声波穿戴设备,USB-C交换机,CMSIS
京东太狠:100W数据去重,用distinct还是group by,说说理由? 每日速讯
天天滚动:Spring整合mybatis使用xml配置事务
ChatGPT 国内镜像网站独家汇总:发现最优秀的人工智能对话体验!
小娜再见!微软宣布:Win10、Win11将正式抛弃Cortana 全球热点
观点:不打算修!AMD EPYC Rome服务器芯片运行1044天必定死机
全球量产车最低风阻!昊铂Hyper GT本月上市:能耗比Model 3还低|视点
世界最牛计算机课程变样了:接受AI改造
世界聚焦:Codeforces Round 876 (Div. 2)题解
姑姑拍到侄女做梦吃雪糕:画面分分钟萌翻
今头条!比亚迪突然上调车辆保养价格 部分车型涨幅达50%
【世界快播报】女子考科三系错安全带考官面如死灰:“交杯带”看无奈了
小娜再见!微软宣布:Win10、Win11将正式抛弃Cortana
汽车电动座椅原理_你知道吗|当前时讯
全球今热点:大量安卓用户逃离换iPhone:Android 13保有量不足15%
世界观速讯丨70万买红旗电动车 2年内修10次!车主退车遭拒:已修好无法退
劝学译文翻译_劝学译文
下水10秒即可感染 钻进皮肤体内生长!南京疾控提醒预防血吸虫病
世界简讯:1.2万元拍下单颗荔枝 男子:要送给女友
神速!这类品种再迎新成员,两大公募巨头助阵,对应ETF规模超870亿元_天天报资讯
焦点快看:男子路遇纸片鸟 一查竟是国保动物黄苇鳽:性格机警
QQ音乐豪华绿钻续费价格上调:连续包年158元 你续费吗?
速看:正版cd碟专卖店价格(正版cd碟专卖店)
微控制器实时操作系统实践1实时系统介绍 每日聚焦
全球消息!linux 性能自我学习 ———— cpu 快速定位问题 [六]
苹果语音助手功能将重大升级:Hey Siri成历史
3分钟回顾神十五航天员返回全程:遇上绝美日出朝霞
林峰交往过的女朋友(林峰女朋友)
MES系统初探(一)|世界最资讯
【环球财经】美国总统拜登签署债务上限法案
丰田反对电动车:建议别反对|环球观速讯
平均年龄最大的航天员乘组“落地” 神舟十五号载人飞行任务圆满成功 焦点快播
三星全球首款8K电竞显示器8月上市:用上TCL华星国产高端57英寸屏-世界今日讯
天天日报丨中国战舰果敢拦阻穿越台湾海峡的美国和加拿大海军舰艇
存储价格被国产干碎 大厂密谋涨价:2TB该抄底了
【全球播资讯】最多领1600元!北京发放新一批消费券:手机、电脑等都能用
《蜘蛛侠:纵横宇宙》票房超预期_当前热文
地图的三要素有哪些?_地图的三要素是什么 _3分
俄罗斯呼吁本国iPhone用户彻查手机 存在后门:苹果回应永远不会
【天天聚看点】太空出差186天!神十五乘组返回地球:成功着陆
今年前4个月沈阳市快递业务收入25.67亿元 环球时讯
新能源汽修人才缺口或达80%:汽修学员走出校门就进厂-焦点短讯
环球观焦点:苹果和安卓厂商为何都放弃了小屏市场?幕后原因揭晓
苹果头显来了:难成下一个“iPhone”
4个月卖1751.5亿 彩票盯上年轻人?专家提醒不能靠彩票发财 中奖率低
上海长兴岛房价最新走势_上海长兴岛房价
多彩网安入选第三届贵州省网络安全应急技术支撑单位
世界热讯:智齿是什么意思?_智齿是什么意思
焦点热议:致远的意思解释词语(致远的意思)
焦点速递!3099元起 vivo S17 Pro下周首销:影像比肩高端旗舰
网易云盘的歌怎样分享_网易云盘
环球简讯:神舟十五号载人飞船撤离空间站
每日视点!向安卓看齐!iOS 17下周发:开放第三方应用商店
天天热资讯!一年跌价超95% 只花38元华为P50 Pro秒变5G手机
环球观热点:上海两车“斗气” 致一车骑跨高架栏:专家喊话司机要跳出吃亏思维 吃亏是福
环球动态:高中毕业给朋友的留言(朋友给我留言说1601是什么意思)
LRU缓存与LinkedHashMap源码
天天热文:文心一言 VS 讯飞星火 VS chatgpt (30)-- 算法导论5.2 2题
热点在线丨关于使用openssl命令-同时生成私钥与CSR-Certificate Signing Request的方法记录
高三学生写永久请假条告别班主任:画面催泪
店家回应未开封饮品中有蟑螂:不可能出现蟑螂 全球讯息
全球滚动:注意!高考生这6样东西别发朋友圈
宫崎想乃(关于宫崎想乃介绍)_环球新消息
记录--手把手教你Vue+ECharts+高德地图API实现天气预报数据可视化|当前关注
天天视点!津城高考“最后一课”:喊出自信 留下感动
世界热讯:东风着陆场准备就绪迎接航天员回家 科普:飞船改动越少越安全
天玑之王!vivo X100首发天玑9300:性能对标苹果A17
或信号错误!印度列车相撞事故已致死伤超千人:该国百列火车运行受影响 近乎崩溃_全球微头条
每日快讯!北京西城区举办建筑工地防汛抢险应急救援演练
印度列车相撞事故已致120死超800伤 车头被撞扁:现场惨烈
今日热文:椰树集团首次回应直播风格争议:审美回归、主打真实自然
【天天新要闻】读改变未来的九大算法笔记02_数据库
九八年属什么(中国与十二地支相配以人出生年份的十二种动物)-即时焦点
新动态:当在浏览器中输入百度地址后,发生了什么?(计算机网络篇)
ASP.NET Core优雅的添加HealthCheck_快看点
第六章:分区_每日热点
VX自动刷步数脚本
Visual Studio如何使用自带“诊断工具” 世界微头条
RCEP对15个签署国全面生效|天天消息
比过山车刺激多了 女子体验菲律宾360度秋千:全程尖叫 每日快播
世界滚动:AMD显卡两大神技宣布半年了:还都是PPT!
全世界最大盗版网站死了!居然还和俄乌冲突有关-环球微资讯
IGN满分的神作终于出中文了!可我却高兴不起来
迪士尼公主电影真人与动画对比 你最喜欢哪一个?
左蓝微电子技术有限公司_左蓝-世界快报
世界速讯:下周市场的风险在哪里?