【ACM数论】欧几里得算法

欧几里得算法

欧几里得算法是用来求两个正整数最大公约数的算法。古希腊数学家欧几里得在其著作《The Elements》中最早描述了这种算法,所以被命名为欧几里得算法

计算公式如下所示

(hexo 中 math渲染较慢,稍微等一下,如果还是没出来,就刷新())
g c d ( a , b ) = g c d ( b , a   m o d   b ) gcd(a,b) = gcd(b,a\ mod\ b) gcd(a,b)=gcd(b,a mod b)

下面来证明 g c d ( a , b ) = g c d ( b , a   m o d   b ) 下面来证明gcd(a,b) = gcd(b,a\ mod\ b) 下面来证明gcd(a,b)=gcd(b,a mod b)

证明:设 a > b , 令 a = k b + c ,则 c = a   m o d   b 设 d = g c d ( a , b ) 则有 a = p d , b = q d 故有: p d = k q d + c  则 c = ( p − k q ) d ∴ g c d ( b , a   m o d   b ) = g c d ( b , c ) = g c d ( q d ,( p − k q ) ∗ d ) = d ∗ g c d ( q , p − k q ) (反证法)下面来证明 p 与 p − k q 互质: 假设 q 与 p − k q 不互质,则有 q = m t , p − k q = n t ∴ q = m t , p = ( k m + n ) t ∴ a = m t d , b = ( k m + n ) t d ∴ g c d ( a , b ) = t d 与 g c d ( a , b ) = d 矛盾 ∴ 假设不成立 ∴ q 与 p − k q 互质 ∴ g c d ( b , a   m o d   b ) = d = g c d ( a , b ) 证明:设a>b ,令a=kb+c,则c=a\ mod\ b\\ 设d=gcd(a,b)\ 则有 a=pd,b=qd\\ 故有:pd=kqd+c\ 则c=(p-kq)d\\ \begin{aligned} ∴gcd(b,a\ mod\ b)&=gcd(b,c)\\ &=gcd(qd,(p-kq)*d)\\ &=d * gcd(q,p-kq)\\ \end{aligned}\\ (反证法)下面来证明p与p-kq互质:\\ 假设q与p-kq不互质,则有q=mt,p-kq=nt\\ ∴ q=mt,p=(km+n)t\\ ∴a=mtd,b=(km+n)td\\ ∴gcd(a,b)=td 与gcd(a,b)=d矛盾\\ ∴假设不成立\\ ∴q与p-kq互质\\ ∴gcd(b,a\ mod\ b)=d=gcd(a,b) 证明:设a>b,a=kb+c,则c=a mod bd=gcdab 则有a=pdb=qd故有:pd=kqd+c c=pkqdgcdba mod b)=gcdbc=gcdqd,(pkq)d=dgcdqpkq(反证法)下面来证明ppkq互质:假设qpkq不互质,则有q=mtpkq=ntq=mtp=km+nta=mtdb=km+ntdgcdab=tdgcdab=d矛盾假设不成立qpkq互质gcdba mod b=d=gcdab

计算机计算这个相当地简单:

int gcd(int a,int b)
{
    return b==0?a:gcd(b,a%b);
}
  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值