辗转相除法求两数的最大公约数的原理是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了辗转相除法求两数的最大公约数的原理是啥?相关的知识,希望对你有一定的参考价值。

辗转相除法求两数的最大公约数的原理是什么,有什么依据,怎么证明它? 谢谢。

参考技术A 你是要证明辗转相除法吗?
则假设有两个正整数a和b
其中a<b
a和b的最大公因数是c
则a=cp
b=cq
用b除以a
则b=am+r
其中r是余数
则只要证明a和r的最大公因数是c即可
b=am+r
则cq=cpm+r
r=c(q-pm)
所以r是c的倍数
且显然p和q-pm
互质
这个很简单,你自己证明一下
所以a和r的最大公因数是c
即a和b的最大公因数等于a和r的最大公因数
这就证明了辗转相除法
参考技术B 无论怎样除,若有一个数是被除数和除数的公约数,则余数一定也含有这个公约数。(被除数≥除数)

求两数的最大公约数

求两数的最大公约数
用户输入两个数,求这两个数的最大公约数。
一、程序源代码(一)
#include <iostream>
using namespace std;

int main()
{
int n1, n2;

cout << "输入两个整数: ";
cin >> n1 >> n2;

while(n1 != n2)
{
    if(n1 > n2)
        n1 -= n2;
    else
        n2 -= n1;
}

cout << "HCF = " << n1;
return 0;

}

二、程序源代码(二)
#include <iostream>
using namespace std;

int main() {
int n1, n2, hcf;
cout << "输入两个整数: ";
cin >> n1 >> n2;

// 如果 n2 大于 n1 交换两个变量
if ( n2 > n1) {   
    int temp = n2;
    n2 = n1;
    n1 = temp;
}

for (int i = 1; i <=  n2; ++i) {
    if (n1 % i == 0 && n2 % i ==0) {
        hcf = i;
    }
}

cout << "HCF = " << hcf;
return 0;

}

以上是关于辗转相除法求两数的最大公约数的原理是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何求两数的最大公约数?

辗转相除法

用辗转相除法求两个整数的最大公约数

谁来解释一下用辗转相除法求最两个数的最大公约数原理

关于两数的最大公约数gcd

欧几里得算法和扩欧