首页 > 编程知识 正文

用四种算法求两数最大公约数,求最大公约数的算法五种

时间:2023-05-05 04:11:24 阅读:177066 作者:1809

方法1 )辗转相除(温柔老师算法) mgdmy算法也称为辗转相除,用于计算两个整数a、b的最大公约数。 其计算原理取决于http://www.Sina.com/:gcd(a,b )=gcd(b ) b,a mod b )

定理:a可以表示为a=kb r,r=a mod b

如果设d是a、b的公约数,则得到如下

d|a,d|b,而且r=a - kb,所以d|r

因此,d是(b,a mod b )的公约数

假设d是(b,a mod b )的公约数

d | b,d |r,其中a=kb r

因此,d也是(a,b )的公约数

因此,[a,b]和[b,a mod b的公约数相同,其最大公约数也必然相等,被证明

代码如下所示。 intgcd(inta,int b ) if ) b==0)返回a; returngcd(b,a%b ); (}int main ) ) { int a=12,b=18; intRES=gcd(a,b ); cout a '和' b '的最大公约数为' resendl; 返回0; (方法2 )更相减损法:更相减损术来源于中国古代的《九章算术》,也是一种求解最大公约数的算法。

首先判断两个数的大小,如果两个数相等,其数量本身就是其最大公约数。

不相等时,从大的数中减去小的数,与用该小的数减去它们的结果进行比较。 如果相等,则该差为它们的最大公约数。 不相等时,继续的操作。

代码如下所示。 intgcd(inta,int b ) while(true ) /减去小数位数以保存结果(if(ab ) a-=b; }elseif(ab ) { b -=a; (} else//如果两个数相等,则该数为最大公约数) { return a; } }}int main () { int a=12,b=18; intRES=gcd(a,b ); cout a '和' b '的最大公约数为' resendl; 返回0; )方法3 )3:Stein算法(将换相除法和更相减损法的优越性与移位运算相结合)移位运算的性能非常快,这一点我们已经知道。 对于给定的正整数a和b,可以得到以下结论。 在此,gcb(a,b )意味着求出a,b的最大公约数的函数

在a和b都为偶数的情况下,gcb(a,b )=2gCB ) a/2,b/2 )=2gCB ) a1,b1 ) a为偶数,b为奇数的情况下,gcb ) a,b )=gcb ) a/2,b )=gcb ) 代码如下所示。 intgcd(inta,int b ) if ) a==0)返回b; if(b==0)返回a; if(a%2==0b%2==0) return2*gcd ) a1,b 1 ); ELSEif(a%2==0) returngcd ) a1,b ); ELSEif(B%2==0)返回gcd (a ) a,b 1 ); ELSEreturngcd(ABS(a-b ),min ) a,b ); (}int main ) ) { int a=12,b=18; intRES=gcd(a,b ); cout a '和' b '的最大公约数为' resendl; 返回0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。