欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

欧几里得算法求最大公约数及其非公式化证明

程序员文章站 2024-03-19 22:02:22
...

输入两个整数a和b,计算并输出a和b的最大公约数。

#include <iostream>
using namespace std;

int gcd(int a, int b)
{
    return a % b == 0 ? b : gcd(b, a % b);
}

int main()
{
    int a, b;
    cin >> a >> b;
    cout << gcd(a, b);
    return 0;
}

这个题目是非常经典的算法,本身没什么好说的,其证明如下:

a=qb+r a = qb + r
如果r=0r=0,a是b的倍数,显然b是a和b的最大公因子。
如果r0r \neq 0,任意整除a和b的数必定整除aqb=ra-qb=r ,因此整除n和r的任何数必定整除qb+r=aqb+r=a
所以{a,b}的最大公因子集合和{b,r}的公因子集合是一样的。特别的,{a,b}的最大公因子和{b,r}的最大公因子是一样的。

相关标签: 随笔 算法