欧几里得算法
又称辗转相除法
求a,b的最大公因数的一个方法
a/b=q……r=>a=qb+r(a,b)=(b,r)(0,b)=b
a÷b=q……r,即a=q×b+r
其中q(quotient)为商,r(remainder)为余数
再将除数和余数做新一轮求余运算
直到求得的余数为0
(a,b)=最终的除数
例:
=====(被除数,除数)(172,46)(46,34)(34,12)(12,10)(10,2)(此时余数为0,(a,b)=2)
C++代码
#include<bits/stdc++.h>
using namespace std;
void main()
{
int a = 0, b = 0, r = 1;
cin >> a >> b;
if (b > a)
{
b = b - a;
a = a + b;
b = a - b;
}
while (a % b != 0)
{
r = a % b;
a = b;
b = r;
}
cout << b;
}
简明证明
有a,b,r三个数
分别是式子中的被除数,除数和余数:
(b,a)=x(b,r)=y
由原式可得:
=>=>a=qb+ra′x=qb′x+r((b,a)=x)r=(a′−qb′)x
可得x∣r,同理:
=>=>a=qb+ra=qb′y+r′y((b,r)=y)a=(qb′+r′)y
可得y∣a,即
(b,a)∣r(b,r)∣a
设A,B,R分别为a,b,c的质因数集合
则有:
B∩A⊆RB∩R⊆A∴B∩A=B∩R
得证.
裴蜀等式
又名贝祖定理,裴蜀恒等式等
定理内容
(a,b)=sa+tb
求系数
Why?
(这里有个误区,裴蜀等式是一个定理,也就是说没有所谓的原理,只有证明过程)
就是欧几里得算法的一个应用
真别按着教科书倒着来
咱正着看
设a=172,b=46
a=b=34=12=10=3×b+341×34+122×12+101×10+25×2+0
则
=>=>=>34=a−3b12=b−(a−3b)=4b−a10=(a−3b)−2(4b−a)=3a−11b2=(4b−a)−(3a−11b)=15b−4a
∴2=−4×172+15×46
还是代数好用