中国剩余定理小记
Preface
做 qbxt 原题 GCD Table 的时候忽然发现自己不会 excrt,爬去学了一下 QwQ .
CRT 一个平凡的应用是叫做 CRT 合并的东西 .
一元线性同余方程组
问题描述
解同余方程组
显然 有无数个解,我们只要找出 中的一个解(即最小自然数解)即可 .
有一个科技叫做 Garner 算法,oi wiki 和 LOJ 上都有资料,听说老早就 wellknown 了,但是我显然不会呀 QwQ .
互素情形 - CRT
互素,也就是 两两互素 .
虽然说是互素吧,但其实一般都是 都是素数,毕竟出题人造一组两两互素的数也挺难的 .
引出中国剩余定理(Chinese Remainder Theorem, CRT):
Chinese Remainder Theorem
对于 两两互素的一元线性同余方程组,令 ,,则:
其中 是 模 意义下的逆元 .
证明:
令 ,我们发现:
因为 是两两互素的,所以这非常显然 .
于是可以轻易验证 满足条件,同余 类似 .
此时的时间复杂度就是 ,后面 部分是我自己 YY 的,不对请指出 .
其实这里我们可以发现要求的是 互素,所以逆元一定存在 .
那如果逆元不一定存在,CRT 就失效了,下面来探讨一下一般情况 .
非互素情形 - ExCRT
虽然叫 ExCRT,但是和 CRT 一点关系都没有 .
考虑合并两个同余方程组:
答案显然是 意义下的,回去看 CRT 可以发现乘积其实是 lcm 的特例 .
令 ,于是移项就得到
两边同时 得
根据 的分配律,这个可以变成
exgcd 解出 ,然后代回去就能求 了,可以证明答案是 意义下的 .
我也不知道对不对因为我也没写过
zhx 黑科技 - 大数翻倍法
其实不互素情形的关键就是合并同余方程组 .
先把任务写上,就是要合并下面这个玩意呗
首先答案肯定是 意义下的,问题就是要找 是多少 .
我们考虑直接暴力,枚举所有满足第一个同余方程的 ,然后一个一个判断是否满足第二个,这样就找到答案了 .
做完了?真做完了 .
然而我们可以整一个类似启发式的东西,钦定上 ,这样能少跳几次 .
显而易见跳超过 次就一定无解,因为肯定会产生循环,于是时间复杂度就是 .
想想这玩意咋行啊,总复杂度不就是 了吗,肯定 GG 啊 .
这里就要用到神秘的 zhx 分析法了!!
首先 肯定不会爆 long long
,要不然出题人也做不了,不妨就令其最大值为 吧 .
然后出题人如果想要卡我们,肯定得用大素数,要不然跳几下就找到解了 .
此时分析 ,最大值肯定取到 ( 还合并个毛啊),此时大概就跑 次,这样就卡掉了 .
再检验一下 ,大概是 级别,稳过 .
但是我们发现根据均值不等式, 再大肯定答案越小,于是很大概率就卡不掉了 .
出题人不可能整一堆 吧 /hanx 出题人也不一定知道这个算法
于是这个黑科技就被证明跑得飞快了
核心代码不超过 5 行哦,这里 是一份实现 .
以下是博客签名,正文无关
本文来自博客园,作者:yspm,转载请注明原文链接:https://www.cnblogs.com/CDOI-24374/p/16337207.html
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0)进行许可。看完如果觉得有用请点个赞吧 QwQ
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】