LUOGU P4777 【模板】扩展中国剩余定理(EXCRT)
解题思路
扩展 $crt$,就是中国剩余定理在模数不互质的情况下,首先对于方程
$\begin{cases} x\equiv a_1\mod m_1\\x\equiv a_2\mod m_2\end{cases}$
来说,可以将其写为:
$\begin{cases} x=k_1*m_1+a_1\\x=k_2*m_2+a_2\end{cases}$
然后联立方程:
$k_1*m_1+a_1=k_2*m_2+a_2$
$\Leftrightarrow -k_1*m_1+k_2*m_2=a_1-a_2$
a这样的话形式就很像$exgcd$ 了,可以$exgcd$求出$k_1'*m_1+k_2'*m_2=gcd(m_1,m_2)$的$k_1'$了,然后若$(a_1-a_2)\%gcd(m_1,m_2)\neq 0$,则无解。然后让方程两边同时乘$(a_1-a_2)/gcd(m_1,m_2)$,就可以求出$k_1$了,最后再带入原式可以求出$x$的值,这个$x$记为$x_0$ ,即为满足上面两个方程的一个解,然后将这两个方程
合并成一个方程:$x\equiv x_0\mod lcm(m_1,m_2)$,之后就可以一直合并就行了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib> using namespace std;
const int MAXN = ;
typedef long long LL;
//typedef __int128 LL; inline LL rd(){
LL x=,f=;char ch=getchar();
while(!isdigit(ch)) {f=ch=='-'?:;ch=getchar();}
while(isdigit(ch)) {x=(x<<)+(x<<)+ch-'';ch=getchar();}
return f?x:-x;
} int n;
LL a[MAXN],b[MAXN],M,R; LL slow_mul(LL x,LL y,LL mod){
LL ret=;
for(;y;y>>=){
if(y&) ret=(ret+x)%mod;
x=(x+x)%mod;
}
return ret;
} LL exgcd(LL a,LL b,LL &x,LL &y){
if(!b) {x=;y=;return a;}
LL now=exgcd(b,a%b,x,y);
LL t=x;x=y;y=t-(a/b)*y;
return now;
} int main(){
scanf("%d",&n);
for(int i=;i<=n;i++) a[i]=rd(),b[i]=rd();
M=a[];R=b[];LL x,y,d,now;
for(int i=;i<=n;i++){
d=exgcd(M,a[i],x,y);
// if((R-r[i])%d!=0) puts("-1");
now=((R-b[i])%a[i]+a[i])%a[i];
x=slow_mul(x,now/d,a[i]);R-=M*x;
M=M*(a[i]/d);R=(R%M+M)%M;
}
printf("%lld",(R%M+M)%M);
return ;
}
LUOGU P4777 【模板】扩展中国剩余定理(EXCRT)的更多相关文章
- 中国剩余定理(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)快速入门
问题 传送门 看到这个问题感觉很难??? 不用怕,往下看就好啦 假如你不会CRT也没关系 EXCRT大致思路 先考虑将方程组两两联立解开,如先解第一个与第二个,再用第一个与第二个的通解来解第三个... ...
- 扩展中国剩余定理 exCRT 学习笔记
前言 由于 \(\{\mathrm{CRT}\}\subseteq\{\mathrm{exCRT}\}\),而且 CRT 又太抽象了,所以直接学 exCRT 了. 摘自 huyufeifei 博客 这 ...
- [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) \\ ... ...
- P4777 【模板】扩展中国剩余定理(EXCRT)
思路 中国剩余定理解决的是这样的问题 求x满足 \[ \begin{matrix}x \equiv a_1(mod\ m_1)\\x\equiv a_2(mod\ m_2)\\ \dots\\x\eq ...
- 扩展中国剩余定理(EXCRT)学习笔记
扩展中国剩余定理(EXCRT)学习笔记 用途 求解同余方程组 \(\begin{cases}x\equiv c_{1}\left( mod\ m_{1}\right) \\ x\equiv c_{2} ...
随机推荐
- 深度优先搜索(Depth First Search)
Date:2019-07-01 15:31:11 通俗点理解就是不撞南墙不回头的那种,用栈来实现 算法实现 /* 题目描述: 有n件物品,每件物品的重量为w[i],价值为c[i].现在需要选出若干件物 ...
- spark入门到精通(后续开始学习)
早几年国内外研究者和业界比较关注的是在 Hadoop 平台上的并行化算法设计.然而, HadoopMapReduce 平台由于网络和磁盘读写开销大,难以高效地实现需要大量迭代计算的机器学习并行化算法. ...
- Parallels Desktop Centos 设置IP
参考链接 Parallels Desktop虚拟的Centos系统设置静态IP连网 https://blog.csdn.net/hotdust/article/details/53812953#com ...
- java 一维数组的输出方式
1.使用传统的for()循环输出: //定义一个数组 int []array = {1,2,3,4,5}; for(int i=0;i<array.length;i++) { System.ou ...
- 添加ASP.NET AJAX控件工具集到VS2010的方法
在VS2010中Ajax控件只有5个,其实还有很多支持AJAX特定功能的服务器控件,微软是将这些控件当作开放源代码项目.所以没有集成到VS2010中.这些AJAX控件被称为ASP.NET AJAX控件 ...
- 解决Keep-Alive 和 Close 不能使用此属性设置
http://www.hejingzong.cn/blog/viewblog_86.aspx Keep-Alive 和 Close 不能使用此属性设置 public static void SetHe ...
- C++之指针与数组区别
C++/C程序中,数组要么在静态存储区被创建(如全局数组),要么在栈上被创建.数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变.指针可以随时指向任意类型的内存 ...
- Redhat镜像-RHEL-官方镜像下载大全
原网站内容链接:https://pan.baidu.com/s/12XYXh#list/path=%2F 已经存在自己的云盘上了
- iptables 命令大全
1.连续端口配置 iptables可以方便的配置多个端口.其中根据端口的连续性,又可分为连续端口配置和不连续端口配置. 如: -A INPUT -p tcp –dport 21:25 -j DROP/ ...
- JS函数进阶
函数的定义方式 函数声明 函数表达式 new Function 函数声明 function foo () { } 函数表达式 var foo = function () { } 函数声明与函数 ...