首页 > 编程语言 >推式子——拓展欧几里德算法exgcd

推式子——拓展欧几里德算法exgcd

时间:2024-07-22 15:20:37浏览次数:13  
标签:lfloor frac gcd int 欧几里德 exgcd rfloor bmod 式子

试求方程 \(ax+by=\gcd(a,b)\) 的一组整数解,其中 \(a\) 和 \(b\) 是给定的数

提前准备好一个式子:辗转相除法

\[\gcd(a,b)=\gcd(b,a \bmod b) \]

同时我们可以注意到, \(\bmod\) 的等价版本:

\[a \bmod b=a-b\lfloor \frac{a}{b}\rfloor \]

开始推式子

首先考虑 \(b=0\) 的情况,因为 \(\gcd(a,0)=a\),所以此时的一组解我们可以定为 \(x=1,y=0\)

其次开始考虑 \(b\neq 0\) 的情况咯,我们可以转先求 \(bx+(a\bmod b)y=\gcd(b,a\bmod b)\) 的解,求出来 \(x=x_0,y=y_0\)

那么上面的方程式可以化为

\[ax+by=bx_0+(a\bmod b)y_0=bx_0+(a-b\lfloor \frac{a}{b}\rfloor)y_0 \]

进一步提取因式,可得 $$ax+by=ay_0+b(x_0-\lfloor\frac{a}{b}\rfloor y_0) $$

容易发现一组解就是

\[x=y_0,y=x_0-y_0\lfloor\frac{a}{b}\rfloor \]

你要是问我怎么求出 \(x_0\) 和 \(y_0\) 的,我阿只能说

递归阿!

code:

void exgcd(int &x,int &y,int a,int b){
	if(b==0){
		x=1,y=0;
		return;
	}
	exgcd(x,y,b,a%b);
	int t=x;
	x=y,y=t-y*(a/b);
}

标签:lfloor,frac,gcd,int,欧几里德,exgcd,rfloor,bmod,式子
From: https://www.cnblogs.com/exut/p/18316056

相关文章

  • exgcd
    裴蜀定理对于任意整数\(a,b\)都存在整数\(x,y\),使得\(ax+by=gcd(a,b)\)扩展欧几里得算法(exgcd)设整数\(a,b,x,y\)满足\(ax+by=gcd(a,b)\)若\(b=0\),则\(x=1\),\(y\)取任意整数若\(b>0\)\[ax+by=gcd(a,b)\]\[=gcd(b,a\mod\b)\]\[=bx_0+(a\mod\b)y_0\]\[=bx_0+(a-......
  • 扩展欧几里得算法(exGcd)
    扩展欧几里得算法(ExtendedEuclideanalgorithm,EXGCD),常用于求\(ax+by=c\)的一组可行解。过程设\(ax_1+by_1=\gcd(a,b)\)\(bx_2+(a\modb)y_2=gcd(b,a\modb)\)由欧几里得算法:\(\gcd(a,b)=gcd(b,a\modb)\)所以:\(ax_1+by_1=bx_2+(a\modb)y_2\)又因为:\(a\mod......
  • exgcd 通解(新)
    可能不全,老文章在这什么是通解,我们知道二元一次方程,是如果只有一个式子,那么解会有无数个,而通解就是指让我们只找到一个解就可以推出其他所有解的式子。注意以下变量都为整数。知道了定义下面就是推式子了,首先设\(x,y\)是\(ax+by=\gcd(a,b)\)的一个解,那么有\[y=\le......
  • 推式子的做题记录
    「LOJ#3399」CommunicationNetwork首先列出式子,\(ans=\sum\limits_{T_2}|T_1\capT_2|2^{T_1\capT_2}\)注意到有\(f(S)=\sum\limits_{T\subseteqS}\sum\limits_{T'\subseteqT}(-1)^{T-T'}f(T')\)证明可考虑计算每个\(T'\)的贡献,由于\(T'\subse......
  • 5.9 T2 推式子的过程
    和题解的做法有些不同,不知道为什么,但是能够通过。首先按题解的做法先将式子除以\(z^2\)。令\(\frac{y}{z}=a,\frac{x}{z}=b\)。有:\[\begin{aligned}\frac{x^2}{z^2}-\frac{xy}{z^2}-\frac{y^2}{z^2}+\frac{y}{z}+1-\frac{x}{z}=0\\-a^2-ab+b^2+a+1-b=0\end{aligned}\]题解......
  • [题解]P5656 【模板】二元一次不定方程 (exgcd)
    P5656【模板】二元一次不定方程(exgcd)若存在\(ax+by=c\),则可以根据特解\(x,y\)求出任意通解\(x',y'\):\(\begin{cases}x'=x+k*\frac{b}{\gcd(a,b)}\\y'=y-k*\frac{a}{\gcd(a,b)}\end{cases}(k\in\mathbb{Z})\)求特解的方法是「扩展欧几里得(exgcd)」,如果没接触过可以先阅读......
  • 扩展欧几里得(exgcd)通解及其证明
    exgcd求ax+by=gcd(a,b)中x和y的通解(下面简称通解)什么是通解我们知道二元一次方程,是如果只有一个式子,那么解会有无数个而通解就是指让我们只找到一个解就可以推出其他所有解的式子(注意本证明极其复杂,请直接背模版或感性理解)知道了定义下面就是推式子了首先......
  • P5656 【模版】二元一次不定方程(exgcd)
    综合考查exgcd功力的题目。没有整数解当且仅当\(\gcd(a,b)\nmidc\),直接输出-1。用exgcd解方程\(ax+by=\gcd(a,b)\)得到一组特解\(x_0,y_0\)。对原方程变形得到\(a\cdot\dfrac{xc}{\gcd(a,b)}+b\cdot\dfrac{yc}{\gcd(a,b)}=c\),于是有\(ax+by=c\)的一组特解\(x_1=\d......
  • gcd & exgcd
    gcd&exgcdgcd设\(a=bk+c\),显然有\(c=a\bmodb\)。设\(d\mida,~d\midb\),则\(c=a-bk,\frac{c}{d}=\frac{a}{d}-\frac{b}{d}k\)。由右边的式子可知\(\frac{c}{d}\)为整数,即\(d\midc\),所以对于\(a,b\)的公约数,它也会是\(b,a\bmodb\)的公约数。反过来也需要证......
  • exgcd+乘法逆元相关笔记
    #include<iostream>#include<cstdio>usingnamespacestd;constintpass=0;//exgcd://求解二元一次不定方程//ax+by=(a,b)=(b,a%b)=bx'+(a%b)*y'=bx'+(a-b*(a/b))*y'=b*(x'-(a/b)*y')+ay'//则有y=(x'-(a/b)*y'),x=y'......