zoukankan      html  css  js  c++  java
  • 【算法总结】数学问题-最大公约数和最小公倍数

    【算法总结】最大公约数和最小公倍数

    一、最大公约数(GCD:greatest common divisor

    欧几里得算法:

    若 a、b 全为零则它们的最大公约数不存在;若 a、b 其中之一为零,则它们的最大公约数为 a、b 中非零的那个;若 a、b都不为零,则使新 a = b;新 b = a % b,然后重复该过程。 

    例4.4 最大公约数

    递归代码

    #include<cstdio>
    
    int gcd(int a, int b)
    {
        if (b == 0)return a;//若b为零则最大公约数为a
        else return gcd(b, a%b);//否则改为求b和a%b的最大公约数
    }
    
    int main()
    {
        int a, b;
        while (scanf("%d%d", &a, &b) != EOF)printf("%d
    ", gcd(a, b));
        return 0;
    }

    非递归代码

    #include<cstdio>
    
    int gcd(int a, int b)
    {
        while (b != 0)
        {
            int t = a % b;
            a = b;
            b = t;
        }
        return a;
    }
    
    int main()
    {
        int a, b;
        while (scanf("%d%d", &a, &b) != EOF)printf("%d
    ", gcd(a, b));
        return 0;
    }

    二、最小公倍数(LCM:lowest common multiple

    a、b 两数的最小公倍数为两数的乘积除以它们的最大公约数。

    例4.5 最小公倍数

    时间限制:1 秒  内存限制:128 兆 

    题目描述

    给定两个正整数,计算这两个数的最小公倍数

    输入

    输入包含多组测试数据,每组只有一行,包括两个不大于 1000 的正整数。 

    输出

    对于每个测试用例,给出这两个数的最小公倍数,每个实例输出一行。 

    样例输入

    10 14

    样例输出

    70

    解题代码

    #include<cstdio>
    
    int gcd(int a, int b)
    {
        return b != 0 ? gcd(b, a%b) : a;
    }
    
    int main()
    {
        int a, b;
        while (scanf("%d%d", &a, &b) != EOF)printf("%d
    ", a*b / gcd(a, b));//求最小公倍数
        return 0;
    }
  • 相关阅读:
    Minimum Path Sum
    Unique Paths II
    Unique Paths
    Rotate List
    Permutation Sequence
    Merge Intervals
    Jump Game
    Group Anagrams
    Combination Sum II
    评分
  • 原文地址:https://www.cnblogs.com/yun-an/p/11073233.html
Copyright © 2011-2022 走看看