[洛谷P4777]【模板】扩展中国剩余定理(EXCRT)
题目大意:给你一些关于$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)的更多相关文章
- [洛谷P4777] [模板] 扩展中国剩余定理
扩展中国剩余定理,EXCRT. 题目传送门 重温一下中国剩余定理. 中国剩余定理常被用来解线性同余方程组: x≡a[1] (mod m[1]) x≡a[2] (mod m[2]) ...... x≡a ...
- 中国剩余定理(CRT) & 扩展中国剩余定理(ExCRT)总结
中国剩余定理(CRT) & 扩展中国剩余定理(ExCRT)总结 标签:数学方法--数论 阅读体验:https://zybuluo.com/Junlier/note/1300035 前置浅讲 前 ...
- 扩展中国剩余定理 (exCRT) 的证明与练习
原文链接https://www.cnblogs.com/zhouzhendong/p/exCRT.html 扩展中国剩余定理 (exCRT) 的证明与练习 问题模型 给定同余方程组 $$\begin{ ...
- 扩展中国剩余定理 (ExCRT)
扩展中国剩余定理 (ExCRT) 学习笔记 预姿势: 扩展中国剩余定理和中国剩余定理半毛钱关系都没有 问题: 求解线性同余方程组: \[ f(n)=\begin{cases} x\equiv a_1\ ...
- 扩展中国剩余定理 exCRT 学习笔记
前言 由于 \(\{\mathrm{CRT}\}\subseteq\{\mathrm{exCRT}\}\),而且 CRT 又太抽象了,所以直接学 exCRT 了. 摘自 huyufeifei 博客 这 ...
- [洛谷P4720] [模板] 扩展卢卡斯
题目传送门 求组合数的时候,如果模数p是质数,可以用卢卡斯定理解决. 但是卢卡斯定理仅仅适用于p是质数的情况. 当p不是质数的时候,我们就需要用扩展卢卡斯求解. 实际上,扩展卢卡斯=快速幂+快速乘+e ...
- 扩展中国剩余定理(EXCRT)快速入门
问题 传送门 看到这个问题感觉很难??? 不用怕,往下看就好啦 假如你不会CRT也没关系 EXCRT大致思路 先考虑将方程组两两联立解开,如先解第一个与第二个,再用第一个与第二个的通解来解第三个... ...
- [Luogu P4777] 【模板】扩展中国剩余定理(EXCRT) (扩展中国剩余定理)
题面 传送门:洛咕 Solution 真*扩展中国剩余定理模板题.我怎么老是在做模板题啊 但是这题与之前不同的是不得不写龟速乘了. 还有两个重点 我们在求LCM的时候,记得先/gcd再去乘另外那个数, ...
- P4777 【模板】扩展中国剩余定理(EXCRT)/ poj2891 Strange Way to Express Integers
P4777 [模板]扩展中国剩余定理(EXCRT) excrt模板 我们知道,crt无法处理模数不两两互质的情况 然鹅excrt可以 设当前解到第 i 个方程 设$M=\prod_{j=1}^{i-1 ...
- P4777 【模板】扩展中国剩余定理(EXCRT)&& EXCRT
EXCRT 不保证模数互质 \[\begin{cases} x \equiv b_1\ ({\rm mod}\ a_1) \\ x\equiv b_2\ ({\rm mod}\ a_2) \\ ... ...
随机推荐
- 14、Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
Java并发编程:CountDownLatch.CyclicBarrier和Semaphore 在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch ...
- Linux 下获取本机IP
http://blog.csdn.net/K346K346/article/details/48231933 int main () { /* struct ifaddrs *ifap, *ifa; ...
- HardcodedDebugMode
xmlns:tools="http://schemas.android.com/tools" tools:ignore="HardcodedDebugMode"
- PS 放大眼睛
1.打开图片,Ctrl+J 复制一个 2.选择工具栏的滤镜--液化 然后选择膨胀工具--设置画笔属性
- Vs2015 遇到 CL:fatal error c1510 cannot load language clui.dll
网上说什么点击修复VS,修改VS的,经验证都不好使,直接下载这个库,放在system32/64下面皆可以了
- MySQL☞having子句
having子句:是跟group by结合使用,对分组以后的数据再次进行过滤,经常跟聚合函数结合使用 格式: select 列名/聚合函数 from 表名 where 条件 group by ...
- python基础之全局局部变量及函数参数
1.局部变量和全局变量 1.1局部变量 局部变量是在函数内部定义的变量,只能在定义函数的内部使用 函数执行结束后,函数内部的局部变量会被系统收回 不同函数可以定义相同名字的局部变量,但是各用个的互不影 ...
- <cassert>
文件名: <cassert> (assert.h) 这是一个C语言的诊断库,assert.h文件中定义了一个可作为标准调试工具的宏函数: assert ; 下面介绍这个宏函数:asser ...
- JS里点击事件判断是否 触发了节点 和给标签添加class属性
$("#activityType").click(function(e){ if(e.target==$("#bb")[0]){ var bb=document ...
- js屏蔽/过滤 特殊字符,输入就删除掉,实时删除
1.替换方法: <input type="text" class="domain" onkeyup="this.value=this.value ...