第十五天(1):最大公约数GCD(欧几里得算法)


1. 定理证明

证明:a, b 的最大公约数,同时也是 b, a mod b 的最大公约数
若 g 为 a, b(不同时为0)的公约数,则 g 满足:
a = g l a = g * l
b = g m b = g * m
其中l, m为整数。a和b又可表示为下式:
a = b k + r a = b * k + r
变形后得到:
g l = g m k + r g * l = g * m * k + r
r = g ( l m k ) r = g * (l - m * k)
所以得到 a、b 的公约数同时也必是 b、a mod b 的公约数

假设 g 是 a、b 的最大公约数,但他并不是 a mod b 的最大公约数

即存在 g > g g' > g ,且 g g' 同时整除 b, a mod b

则存在整数 l l' , m m' 使得下式成立:
b = g m b = g' * m'
r = a M o d b = g l r = a Mod b = g' * l'
同时有:
a = b k + r a = b * k + r
a = ( g m ) k + ( g l ) a = (g' * m') * k + (g' * l')
a = g ( m k + l ) a = g' * (m' * k + l')
所以 g g' 也同时整除 a,则 g g' 同时也是 a, b 的公约数,与题目不符合
所以可证得:a, b 的最大公约数,同时也是 b, a mod b 的最大公约数

2. 问题求解

我们把求 a、b 的最大公约数转换成了求 b、a mod b 的最大公约数, 那么问题不变而数据规模则明显变小, 我们可以不断重复该过程, 直到问题缩小成求某个非零数与零的最大公约数,这样,该非零数即是所求。

过程
  1. 若 a, b 全为0,则他们的最大公约数不存在
  2. 若 a, b 其中之一为0, 则他们的最大公约数为 a, b 中非零的那一个
  3. 若 a, b 都不为0,则使 a = b a' = b , b = a M o d b b' = aModb
  4. 重复过程

3. T

最大公约数

描述: 输入两个正整数,求其最大公约数。

输入: 测试数据有多组,每组输入两个正整数。

输出: 对于每组输入,请输出其最大公约数。

样例输入:
49 14

样例输出:
7

3. 1 Non Recursive

//
// main.cpp
// GCD_NonRecursive
//
// Created by Apple on 2019/8/19.
// Copyright © 2019 Apple_Lance. All rights reserved.
//

#include <iostream>
#include <stdio.h>

int gcd(int a, int b){
    while(b != 0){
        int tmp = a % b;
        a = b;
        b = tmp;
    }
    return a;
}

int main(int argc, const char * argv[]) {
    // insert code here...
    int a, b;
    while(scanf("%d%d", &a, &b) != EOF)
        printf("%d", gcd(a, b));
    return 0;
}

3. 2 Recursive

//
//  main.cpp
//  GCD
//
//  Created by Apple on 2019/8/19.
//  Copyright © 2019 Apple_Lance. All rights reserved.
//

#include <iostream>
#include <stdio.h>
using namespace std;

int gcd(int a, int b){
    if(b == 0)
        return a;
    else
        return gcd(b, a%b);
}

int main(int argc, const char * argv[]) {
    // insert code here...
    int a, b;
    while (scanf("%d%d", &a, &b))
        printf("%d", gcd(a, b));
    return 0;
}
发布了182 篇原创文章 · 获赞 101 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/lancecrazy/article/details/99713152