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

    【原创】

    两个数a,b,求二者的最大公约数,传统朴素的想法大家肯定都懂,不多说,这里有一种算法叫欧几里得算法,思想:若a,b同时为0,那么最大公约数不存在,若,一个为0,那么最大公约数为另外一个不为0 的数,若a,b都不为0,则使新的a=b,新的b =a%b,然后重复使得b=0,此时的a为所求,至于这个算法的证明,可以去百度一下最大公约数的欧几里得算法证明,不过写两个数,自己笔算一下就出来了;

    在求得最大公约数后,在求最小公倍数便十分的方便直接a*b/公约数

    代码:这里提供了递归和迭代实现

    #include<stdio.h>
    //最大公约数方法,递归
    int gcd_1(int a,int b){
        if (b==0) return a;
        else return gcd_1(b,a%b);
    }
    //最大公约数方法2
    int gcd_2(int a,int b){
        while(b){
            int tmp = a%b;
            a = b;
            b = tmp;
        }
        return a;
    }
    int main() {
        int a,b;
        while (scanf("%d%d",&a,&b)!=EOF) {
       printf("%d
    ",gcd_1(a, b));//最大公约数
        printf("%d
    ",a*b/gcd_2(a,b));//最小公倍数
        }
        return 0;
    }
  • 相关阅读:
    case when if
    存储过程 、函数和事务
    poj 2263
    hdu -1874
    poj 2472
    2544 hdu
    模板floyed
    模板Dijkstra
    hdu 2066
    hdu 2544
  • 原文地址:https://www.cnblogs.com/numen-fan/p/6497122.html
Copyright © 2011-2022 走看看