同余原理与丢番图方程

同余定理

定理: gcd(a, b) = gcd(b, a%b)
证明:
a = k b + r , a = kb+r, a=kb+r,则r=a%b
假设d是(a,b)的一个公约数,则有d|a,d|b
r = a − k b , r=a-kb, r=akb,因此 d ∣ r , d|r, dr,因此 d d d是(b,a%b)的公约数
假设d是(b,a%b)的公约数,则有 d ∣ b , d ∣ r d|b,d|r db,dr
a = k b + r , a=kb+r, a=kb+r,因此 d ∣ a , d|a, da,因此 d d d ( a , b ) (a,b) a,b的公约数
因此(a,b)和(b,a%b)的公约数是相同的,其最大公约数也必然相同

int gcd(a,b){return !b?a:gcd(b,a%b);}
更相减损术

a < b , a<b, a<b, s w a p ( a , b ) swap(a,b) swap(a,b)
a a a为奇数, b b b为偶数, G C D ( a , b ) = G C D ( a , b / 2 ) GCD(a,b)=GCD(a,b/2) GCDa,b=GCD(a,b/2)
a a a为偶数, b b b为奇数, G C D ( a , b ) = G C D ( a / 2 , b ) GCD(a,b)=GCD(a/2,b) GCDa,b=GCD(a/2,b)
a a a为偶数, b b b为偶数, G C D ( a , b ) = G C D ( a / 2 , b / 2 ) GCD(a,b)=GCD(a/2,b/2) GCDa,b=GCD(a/2,b/2)
a a a为奇数, b b b为奇数, G C D ( a , b ) = G C D ( a − b , b ) GCD(a,b)=GCD(a-b,b) GCDa,b=GCD(ab,b)

丢番图方程

裴蜀定理:丢番图方程 a x + b y = c ax+by = c ax+by=c有解当且仅当 g c d ( a , b ) ∣ c gcd(a,b)|c gcd(a,b)c
扩展gcd算法:求丢番图方程 a x + b y = c ax+by=c ax+by=c的整数解
推导:
a x 1 ax_{1} ax1 + b y 1 by_{1} by1 = g c d ( a , b ) gcd(a,b) gcd(a,b)
b x 2 bx_{2} bx2 + ( a (a (a%b) y 2 y_{2} y2 = g c d gcd gcd(b,a%b)
g c d ( a , b ) gcd(a,b) gcd(a,b) = g c d gcd gcd(b, a%b)得到:
a x 1 ax_{1} ax1 + b y 1 by_{1} by1 = b x 2 bx_{2} bx2 + ( a (a (a%b) y 2 y_{2} y2 = a y 2 ay_{2} ay2 + b ( x 2 − ( a / b ) y 2 b(x2-(a/b)y_{2} b(x2(a/b)y2)
所以
x 1 x_{1} x1 = y 2 y_{2} y2
y 1 y_{1} y1 = x 2 x_{2} x2 - ( a / b ) y 2 (a/b)y_{2} (a/b)y2

递归实现方程解

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

上面求得其中一组解
x 1 x_{1} x1+ k b g c d ( a , b ) \frac{kb}{gcd(a,b)} gcd(a,b)kb, y 1 y_{1} y1+ k a g c d ( a , b ) \frac{ka}{gcd(a,b)} gcd(a,b)ka

是该方程的通解

证明:代入易证

相关题目

SDOI2009 最大公约数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值