当前位置: 首页 > news >正文

26-4-23日志 - Ghost

Table of Contents

  1. 今日 Keyword:
  2. Part 1. ExGCD.
    1. WriteUp.
    2. Tips.
  3. T1. LOJ #10209. 「一本通 6.4 例 1」青蛙的约会 / 洛谷 P1516.
    1. WriteUp.
  4. Part 2. 中国剩余定理 CRT.
    1. Lemma1
    2. Proof.
  5. T2. LOJ #10212. 「一本通 6.4 例 4」曹冲养猪 / 洛谷 P1495 【模板】中国剩余定理(CRT)/ 曹冲养猪
    1. WriteUp.
  6. 今日总结:

Powered by Ghostface's Emacs.

P.S.今天是挑战150天冲击CSP-S 2026省一的第3天,目前阶段:数论.
离CSP-S 2026 还有148天.

“纵有疾风起,人生不言弃”

今日 Keyword:

ExGCD,乘法逆元,中国剩余定理(CRT).

Part 1. ExGCD.

昨天我们成功解决了「如何用ExGCD解决形如 \(ax + by = gcd(a,b)\) 的方程的问题」,那么今天我们进行一个推广:
Subtask1: 求形如 \(ax + by = c\) 的整数解。

WriteUp.

那么显然我们要应用昨天的结论做转化,设存在 \(x',y',a',b'\) ,
\(s.t. a'x' + b'y' = 1\) ,根据昨天的推导,这个方程有解的充要条件就是 \(gcd(a',b') = 1\) .
接下来我们考虑转化,令 \(a' = \frac{a}{g} ,b' = \frac{b}{g} ,c' = \frac{c}{g} ,g = gcd(a,b)\) ,
就有:
\(a'x'c' + b'y'c' = c'\) ,更进一步, \(a'x'c'g + b'y'c'g = c'g\) .
也就等于 \(ax'c' + by'c' = c\) ,即 \(x = x'c',y = y'c'\) 是一组特解。
易知有解的充要条件是 \(gcd(a,b) | c\) .
因此,我们只需要用ExGCD求出方程 \(a'x + b'y = 1\) 的一组解,最后乘上 \(\frac{c}{gcd(a,b)}\) 即可。
而由昨天的推导,最小正整数解就是 \(x = (x_0 mod \frac{b}{g} + \frac{b}{g}) mod \frac{b}{g}\) .

Tips.

有人要说了,我们可以解 \(ax' + by' = 1\) ,两边直接同乘一个 \(c\) 就可以得到想要的答案。
事实上,我一开始也是这么想的,然而这是不正确的,理由如下:
我们不保证 \(a,b\) 互质,因此这个转化后的方程可能无解。
构造中的 \(a' = \frac{a}{g} ,b' = \frac{b}{g} ,c' = \frac{c}{g} ,g = gcd(a,b)\) 就是确保子方程的 \(a,b\) 互质的。
因此有且仅有这么一种解法,当然,这也告诉我们,当 \(a,b\) 互质时,这个结论正确。

另外的一种理解方法,若是 \(a,b\) 互质,\(g = 1\),等价于这种思路。

T1. LOJ #10209. 「一本通 6.4 例 1」青蛙的约会 / 洛谷 P1516.

两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.
但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面。

我们把这两只青蛙分别叫做青蛙 A 和青蛙 B,并且规定纬度线上东经 \(0\) 度处为原点,由东往西为正方向,单位长度 \(1\) 米,这样我们就得到了一条首尾相接的数轴。
设青蛙 A 的出发点坐标是 \(x\),青蛙 B 的出发点坐标是 \(y\)。青蛙 A 一次能跳 \(m\) 米,青蛙 B 一次能跳 \(n\) 米,两只青蛙跳一次所花费的时间相同。
纬度线总长 \(L\) 米。现在要你求出它们跳了几次以后才会碰面。

输入只包括一行五个整数 \(x,y,m,n,L\)

输出碰面所需要的次数,如果永远不可能碰面则输出一行一个字符串 `Impossible`。

对于 \(100\%\) 的数据,\(1 \le x, y, m, n \le 2 \times 10^9\)\(x \ne y\)\(1 \le L \le 2.1 \times 10^9\)

WriteUp.

不妨设跳了 \(T\) 步,那么A的新坐标就是 \((x + Tm)\) ,B的新坐标就是 \((y + Tn)\) .
相遇的充要条件为 \(存在k \in Z , (x + Tm) - (y + Tn) = kL\) .
变形得 \((n - m)T + kL = x - y\) .
用ExGCD求解即可。

#include <bits/stdc++.h>
using namespace std;
long long x, y, n, m, l;
void exgcd(long long a, long long b, long long &d, long long &x, long long &y) {if (b == 0) {d = a, x = 1, y = 0;} else {exgcd(b, a % b, d, x, y);long long t = x;x = y, y = t - (a / b) * y;}
}
long long gcd(long long a, long long b) {if (b == 0)return a;return gcd(b, a % b);
}
int main() {cin >> x >> y >> m >> n >> l;if (n < m) {swap(n, m);swap(x, y);}long long g = gcd(n - m, l);if ((x - y) % g != 0 || n == m) {cout << "Impossible" << endl;return 0;}long long ax = (n - m) / g, bx = (l) / g, cx = (x - y) / g;long long d = 0, tx = 0, ty = 0;exgcd(ax, bx, d, tx, ty);cout << ((tx * cx) % bx + bx) % bx << endl;return 0;
}

Tips: 警惕符号错误!

Part 2. 中国剩余定理 CRT.

Lemma1

\[ \begin{cases} x \equiv a_1 \pmod{m_1} \\ x \equiv a_2 \pmod{m_2} \\ \vdots \\ x \equiv a_n \pmod{m_n} \end{cases}\]

其中 \(m_1, m_2, \dots, m_n\) 两两互质。则方程组在模 \(M = m_1 m_2 \cdots m_n\) 下有唯一解:

\[x \equiv \sum_{i=1}^{n} a_i \cdot M_i \cdot t_i \pmod{M} \]

其中 \(M_i = M / m_i\)\(t_i\)\(M_i\)\(m_i\) 下的逆元,即 \(M_i \cdot t_i \equiv 1 \pmod{m_i}\)

Proof.

因为 \(M_i\) 是除 \(m_i\) 之外所有模数的倍数,所以:
\(\forall k!=i, a_iM_it_i \equiv 0 \pmod{m_k}\)

以及:
\(\forall i \in n, a_iM_it_i \equiv a_i \pmod{m_i}\)
现在直观地理解,将 \(x\) 带入原式后,由于取模的性质,对于所有 \(k!=i\) 的项,取模后均为0.
因此,只剩下 \(a_iM_it_i\) 这一项,又因为 \(M_it_i \equiv 1 \pmod{m_i}\) ,所以, \(a_i \equiv a_i \pmod{m_i}\) .
Qed.

有解的充要条件即是模数两两互质,否则,在上述证明过程中,消去多余项的这一步就不成立,会有多余的项留下。

T2. LOJ #10212. 「一本通 6.4 例 4」曹冲养猪 / 洛谷 P1495 【模板】中国剩余定理(CRT)/ 曹冲养猪

自从曹冲搞定了大象以后,曹操就开始琢磨让儿子干些事业,于是派他到中原养猪场养猪,可是曹冲满不高兴,于是在工作中马马虎虎,有一次曹操想知道母猪的数量,于是曹冲想狠狠耍曹操一把。
举个例子,假如有 \(16\) 头母猪,如果建了 \(3\) 个猪圈,剩下 \(1\) 头猪就没有地方安家了。如果建造了 \(5\) 个猪圈,但是仍然有 \(1\) 头猪没有地方去,然后如果建造了 \(7\) 个猪圈,还有 \(2\) 头没有地方去。
你作为曹总的私人秘书理所当然要将准确的猪数报给曹总,你该怎么办?

第一行包含一个整数 \(n\) —— 建立猪圈的次数,接下来 \(n\) 行,每行两个整数 \(a_i, b_i\),表示建立了 \(a_i\) 个猪圈,有 \(b_i\) 头猪没有去处。你可以假定 \(a_1 \sim a_n\) 互质。

输出包含一个自然数,即为曹冲至少养母猪的数目。

\(1 \leq n\le10\)\(0 \leq b_i\lt a_i\le100000\)\(1 \leq \prod a_i \leq 10^{18}\)

WriteUp.

中国剩余定理CRT 模版题。

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using i128 = __int128;const int MAXN = 15;  
ll a[MAXN], m[MAXN], Mx[MAXN];
ll M = 1, n;void exgcd(ll a, ll b, ll& d, ll& x, ll& y) {if (b == 0) {d = a; x = 1; y = 0;} else {exgcd(b, a % b, d, x, y);ll t = x;x = y;y = t - (a / b) * y;}
}void CRT() {ll ans = 0;ll tx, ty, td;for (int i = 1; i <= n; i++) {exgcd(Mx[i], m[i], td, tx, ty);tx = (tx % m[i] + m[i]) % m[i];i128 term = (i128)a[i] * Mx[i] % M * tx % M;ans = (ans + (ll)term) % M;}cout << (ans + M) % M << endl;
}int main() {cin >> n;for (int i = 1; i <= n; i++) {cin >> m[i] >> a[i];M *= m[i];}for (int i = 1; i <= n; i++) {Mx[i] = M / m[i];}CRT();return 0;
}

今日总结:

今天第二天写日志了,感觉也是非常不错,有我暑假训练的感觉了。
怎么说呢,情绪不好的话就做数学吧,数学能让我们迅速冷静下来。
本文的绝大部分手稿都是在学校课间完成,所以比较散,周末会加以整理。

“梦想只要挑战,就能将其变成现实”————《强风吹拂》
Upt 2026.4.23 22:48
ghostface

http://www.jsqmd.com/news/689566/

相关文章:

  • 保姆级教程:在Ubuntu上为AM5728开发板交叉编译GPSD 3.18(附libusb/ncurses依赖库完整配置)
  • 避开Latex!用Word向ACM会议投稿的完整攻略:从模板适配到TAPS最终提交
  • 智能合约开发框架对比
  • 别再只盯着运放了!用TI INA826这类仪表放大器搞定传感器信号调理,实测避坑指南
  • 从入门到精通:AI产品经理的完整学习指南与实战路径
  • 告别Grbl依赖:手把手教你用STM32CubeMX和emWin搭建带U盘脱机功能的CNC控制界面
  • 电荷泵在嵌入式系统中的应用:从LCD驱动到EEPROM编程
  • IGBT驱动信号里的‘空白时间’:手把手教你分析SVPWM/SPWM中的死区效应与谐波
  • Spring Boot Admin Server 2.3.1 保姆级搭建教程:从零到UI界面,含Spring Security安全配置避坑指南
  • ADS负载牵引实战:从CGH40010F管子的1.6GHz仿真到稳定电路设计,一步步教你优化PA性能
  • 【2026年最新600套毕设项目分享】微信小程序的酒店管理系统(30147)
  • 虾皮 大数据开发工程师面试题精选:10道高频考题+答案解析(附PDF)
  • 别再傻傻分不清了!一文讲透增量式与绝对式编码器到底怎么选(附选型避坑指南)
  • C#借助EPPlus高效处理海量Excel数据:从导入到写入的实战解析
  • FeNOMS架构:存储内计算加速质谱数据分析
  • 2026年最新|手把手教你用EasyClaw PPT大师:免费一键生成PPT,告别手动排版
  • Excel实战:用PCA给你的客户数据‘瘦身’,5步完成特征筛选与可视化
  • 量子储层计算在对抗鲁棒性中的优势与应用
  • 【NASA/JPL/ISO联合认证配置包首发】:C内存安全2026规范工业级部署套件(含SAST白名单规则集+运行时hook注入检测模块+审计报告自动生成脚本)
  • 别再只改hosts了!RocketMQ Broker启动时指定conf文件的正确姿势(解决连接失败)
  • RTX 3050 Ti显卡玩转PyTorch:如何为特定版本(如1.12)精准匹配CUDA 11.3环境
  • 你用的ChatGPT,99%的“努力”都在你根本看不见的地方
  • 保姆级教程:手把手教你优化SA8155 QNX系统启动时间(从32ms到秒级)
  • FHE-SQL全同态加密数据库性能优化实战
  • 云顶之弈悬浮助手:提升你的策略决策效率
  • 从Java到前端:一名全栈开发者的成长之路
  • 抖音无水印下载神器:GitHub_Trending/do/douyin-downloader终极使用指南
  • CRNN里的CTC Loss到底是咋工作的?用‘连连看’和‘消消乐’给你讲明白
  • 2026年AI生成PPT横评:5款工具实测,哪个最好用?
  • 开发环境救星:把整套Win+Linux+MySQL服务塞进移动固态硬盘,随插随用还能内网穿透