zoukankan      html  css  js  c++  java
  • 最大公约数和最小公倍数


    问题描述:

        求两个或者多个数的最大公约数、最小公倍数

    问题解决:

    (1)最大公约数-------指某几个整数共有因子中最大的一个。

                欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理:

    定理:gcd(a,b) = gcd(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)的公约数是一样的,其最大公约数也必然相等,得证

    (1.1)两个数的大公约数
    clipboard
    (1.2)三个数以上的最大公约数
        考虑到可能求最大公约数的数目较多,如果使用欧几里得算法,两个数两个数的进行辗转相除,递归的深度可能会很大,那么这里使用最大公约数的定义来求解最大公约数。
    思路是:
    (1)求出所有数中最小的数min
    (2)从min-1中,寻找可以被所有数整除的数
    clipboard[1]
    (1.3)如下是使用递归方法求解
    clipboard[2]
    (2)两个数的最小公倍数
    clipboard[3]
    注:关于最大公约数和最小公倍数存在如下的关系:
    gcd(a,b)*lcm(a,b)=a*b;
    (2.1)三个数以上的最小公倍数,使用递归方法来求解
    clipboard[4]
  • 相关阅读:
    Spark SQL+day04笔记
    Spark 环境搭建
    海量数据处理 算法总结2
    Scala面试题 看过1
    HTML-table、form表单标签的介绍
    Java-CSS美化网页元素
    Java-BOM与DOM对象
    java-CSS盒子模型、浮动、定位
    java-基础面试题(2)
    Java-io流
  • 原文地址:https://www.cnblogs.com/luosongchao/p/3046395.html
Copyright © 2011-2022 走看看