zoukankan      html  css  js  c++  java
  • 辗转相除法(求最大公约数或最小公倍数)

    辗转相除法

    • 作用:
      • 可以用来求最大公约数
      • 可以求两数的最小公倍数
    • 原理:若a除以b的余数为r,则有(a,b)=(b,r),递归后,b就是他的最大公约数。
    • 算法演示:

    方法一:

    int gcd(int m,int n)
    {
            int t = 1;
            while(t != 0)
            {
                    t=m%n;
                    m=n;
                    n=t;
            }
            return m;
    }
    

    方法二:

    int gcd(int m,int n)
    {
            int t = 1;
            while(m%n != 0)
            {
                    t=m%n;
                    m=n;
                    n=t;
            }
            return n;
    }
    //这个时候返回的是n,为什么呢?
    //因为while的原因,当m%n等于0时,直接跳出循环了,没有m,n的转换了,这点困扰我好久。。。
    

    方法三:递归

    #include <iostream>
    #include <conio.h>
    using namespace std;
     
    int gcd(int a, int b){
    	return b == 0 ? a : gcd(b, a % b);
    }
     
    int main()
    {
    	cout << gcd(169, 48) << endl;
    	_getch();
    	return 0;
    }
    
  • 相关阅读:
    JavaScript闭包
    模块模式——方法
    产品与技术
    读书笔记
    屌丝求职记
    正则表达式regex狂记
    css狂记
    html狂记
    Android狂记忆
    关于调式
  • 原文地址:https://www.cnblogs.com/qscgy/p/13341818.html
Copyright © 2011-2022 走看看