题目大意:给你一些关于$x$的方程组:
$$
\begin{cases}
x\equiv a_1\pmod{mod_1}\\
x\equiv a_2\pmod{mod_2}\\
\vdots\\
x\equiv a_n\pmod{mod_n}
\end{cases}
$$
求解$x$的最小非负整数解($\gcd(mod_1,mod_2,\cdots,mod_n)\not=1$)

题解:$EXCRT$,假设有两个方程
$$
\begin{cases}
x\equiv x_1\pmod{A}\\
x\equiv x_2\pmod{B}
\end{cases}\\
设g=\gcd(A,B),k=\left\lfloor\dfrac xg\right\rfloor,c=x\bmod g\\
x=kg+c\\
所以x_1\equiv x_2\equiv c\pmod g\\
\begin{cases}
kg+c\equiv x_1\pmod A\\
kg+c\equiv x_2\pmod B\\
\end{cases}\\
令k_1=\left\lfloor\dfrac {x_1}g\right\rfloor,k_2=\left\lfloor\dfrac {x_2}g\right\rfloor\\
\begin{cases}
kg+c\equiv k_1g+c\pmod A\\
kg+c\equiv k_2g+c\pmod B\\
\end{cases}\\
\begin{cases}
kg\equiv k_1g\pmod A\\
kg\equiv k_2g\pmod B\\
\end{cases}\\
\begin{cases}
k\equiv k_1\pmod{\left\lfloor\dfrac Ag\right\rfloor}\\
k\equiv k_2\pmod{\left\lfloor\dfrac Bg\right\rfloor}\\
\end{cases}\\
这样就可以用CRT解决了
$$
$CRT$部分见博客

卡点:

C++ Code:

#include <cstdio>
long long gcd(const long long a, const long long b) {
if (!b) return a;
return gcd(b, a % b);
}
inline long long lcm(const long long a, const long long b) { return a / gcd(a, b) * b; }
inline long long mul(const long long x, const long long y, const long long mod) {
static long long res;
res = x * y - static_cast<long long> (static_cast<long double> (x) * y / mod + 0.5) * mod;
return res + (res >> 63 & mod);
}
void exgcd(const long long a, const long long b, long long &x, long long &y) {
if (!b) x = 1, y = 0;
else exgcd(b, a % b, y, x), y -= a / b * x;
}
inline long long inv(const long long a, const long long mod) {
static long long x, y;
exgcd(a, mod, x, y);
return x + (x >> 63 & mod);
}
inline long long getreduce(const long long x, const long long mod) { return x + (x >> 63 & mod); } long long CRT(const long long A, const long long mod1, const long long B, const long long mod2) {
const long long mod = mod1 * mod2, inv1 = inv(mod1, mod2);
return getreduce(mul(mul(getreduce((B - A) % mod2, mod2), inv1, mod2), mod1, mod) + A, mod);
}
long long EXCRT(const long long A, const long long mod1, const long long B, const long long mod2) {
if (A % mod2 == B) return A;
const long long GCD = gcd(mod1, mod2), t = CRT(A / GCD, mod1 / GCD, B / GCD, mod2 / GCD);
return t * GCD + (A % GCD);
} int n;
int main() {
scanf("%d", &n);
long long LCM = 1, ans = 0;
for (int i = 0; i < n; ++i) {
static long long a, b;
scanf("%lld%lld", &a, &b); b %= a;
ans = EXCRT(ans, LCM, b, a);
LCM = lcm(LCM, a);
}
printf("%lld\n", ans);
}

[洛谷P4777]【模板】扩展中国剩余定理(EXCRT)的更多相关文章

  1. [洛谷P4777] [模板] 扩展中国剩余定理

    扩展中国剩余定理,EXCRT. 题目传送门 重温一下中国剩余定理. 中国剩余定理常被用来解线性同余方程组: x≡a[1] (mod m[1]) x≡a[2] (mod m[2]) ...... x≡a ...

  2. 中国剩余定理(CRT) & 扩展中国剩余定理(ExCRT)总结

    中国剩余定理(CRT) & 扩展中国剩余定理(ExCRT)总结 标签:数学方法--数论 阅读体验:https://zybuluo.com/Junlier/note/1300035 前置浅讲 前 ...

  3. 扩展中国剩余定理 (exCRT) 的证明与练习

    原文链接https://www.cnblogs.com/zhouzhendong/p/exCRT.html 扩展中国剩余定理 (exCRT) 的证明与练习 问题模型 给定同余方程组 $$\begin{ ...

  4. 扩展中国剩余定理 (ExCRT)

    扩展中国剩余定理 (ExCRT) 学习笔记 预姿势: 扩展中国剩余定理和中国剩余定理半毛钱关系都没有 问题: 求解线性同余方程组: \[ f(n)=\begin{cases} x\equiv a_1\ ...

  5. 扩展中国剩余定理 exCRT 学习笔记

    前言 由于 \(\{\mathrm{CRT}\}\subseteq\{\mathrm{exCRT}\}\),而且 CRT 又太抽象了,所以直接学 exCRT 了. 摘自 huyufeifei 博客 这 ...

  6. [洛谷P4720] [模板] 扩展卢卡斯

    题目传送门 求组合数的时候,如果模数p是质数,可以用卢卡斯定理解决. 但是卢卡斯定理仅仅适用于p是质数的情况. 当p不是质数的时候,我们就需要用扩展卢卡斯求解. 实际上,扩展卢卡斯=快速幂+快速乘+e ...

  7. 扩展中国剩余定理(EXCRT)快速入门

    问题 传送门 看到这个问题感觉很难??? 不用怕,往下看就好啦 假如你不会CRT也没关系 EXCRT大致思路 先考虑将方程组两两联立解开,如先解第一个与第二个,再用第一个与第二个的通解来解第三个... ...

  8. [Luogu P4777] 【模板】扩展中国剩余定理(EXCRT) (扩展中国剩余定理)

    题面 传送门:洛咕 Solution 真*扩展中国剩余定理模板题.我怎么老是在做模板题啊 但是这题与之前不同的是不得不写龟速乘了. 还有两个重点 我们在求LCM的时候,记得先/gcd再去乘另外那个数, ...

  9. P4777 【模板】扩展中国剩余定理(EXCRT)/ poj2891 Strange Way to Express Integers

    P4777 [模板]扩展中国剩余定理(EXCRT) excrt模板 我们知道,crt无法处理模数不两两互质的情况 然鹅excrt可以 设当前解到第 i 个方程 设$M=\prod_{j=1}^{i-1 ...

  10. P4777 【模板】扩展中国剩余定理(EXCRT)&& EXCRT

    EXCRT 不保证模数互质 \[\begin{cases} x \equiv b_1\ ({\rm mod}\ a_1) \\ x\equiv b_2\ ({\rm mod}\ a_2) \\ ... ...

随机推荐

  1. R语言使用过程中出现的问题--attach()函数的使用

    使用attach(file)时,一定要配合使用detach(file),否则再此运行程序时极易出现问题,The following objects are masked ... 此外工作空间中不能有与 ...

  2. 一个CookieContainer的拓展类

    最近项目中需要频繁用到服务器返回的Cookie,由于项目采用的是HttpClient,并且用CookieContainer自动托管Cookie,在获取Cookie的时候不太方便.所以就写了个拓展类. ...

  3. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 – 员工离职管理

    C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 – 员工离职管理 当公司有几万人,上千家加盟网点,几个庞大的直属分公司后,系统账户的有效管理也是一个头疼的问题,把所有的帐户及时进行科学 ...

  4. 「题目代码」P1039~P1043(Java)

    P1039 谭浩强C语言(第三版)习题4.9 import java.util.*; import java.io.*; import java.math.BigInteger; public cla ...

  5. AirtestIDE实践一:梦幻西游手游师门任务自动化

    Airtest Project是网易自研的游戏自动化项目.Airtest IDE是这个项目的一个IDE,就像Eclipse.Pycharm一样,是一个集成开发工具.Airtest框架是一个基于Open ...

  6. katalon系列五:使用Katalon Studio手动编写WEB自动化脚本

    上一篇主要讲了怎么录制脚本,这次我们看看怎么手动编写脚本,接下来就编写一个简单的用百度搜索的脚本. 1.我们先抓取页面上的元素,点击工具栏上的Spy Web按钮(地球上有个绿点),URL输入百度地址, ...

  7. bash脚本练习

    练习一: 1.添加5个用户,user1,...,user5: 2.每个用户的密码同用户名,添加密码完成后,不显示命令的执行结果: 3.每个用户添加完成后,都要显示用户某某已添加成功. useradd ...

  8. 第一篇 HTML基础

    浏览网页,就是上网,上网的本质就是下载内容. 浏览器是个解释器,用来执行HTML.css.JS代码的. HTML,CSS, JavaScript 号称网络三剑客. 1. 浏览器发送一个域名给服务端 2 ...

  9. hdu刷题2

    hdu1021 给n,看费波纳列数能否被3整除 算是找规律吧,以后碰到这种题就打打表找找规律吧 #include <stdio.h> int main(void) { int n; whi ...

  10. FFM

    转载自http://blog.csdn.net/jediael_lu/ https://blog.csdn.net/jediael_lu/article/details/77772565 点击率预估算 ...