zoukankan      html  css  js  c++  java
  • GCD(最大公约数)

     最大公约数
    Content
       算法介绍
       递推写法
       递归写法
     算法介绍——欧几里得算法(辗转相除法), 欧几里得算法是用来求两个正整数最大公约数的算法,以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数(有点绕可能不懂,没事!看演算过程)
    时间复杂度(O(logN))
     假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里得算法,是这样进行的:
     m        n
     1997 /  615 = 3  (余 152)
     615   /  152 = 4  (余7)
     152   /  7     = 21(余5)
     7       /  5     = 1  (余2)
     5       /  2     = 2  (余1)
     2       /  1     = 2  (余0)
     至此,最大公约数为1
     两个数的最小公倍数是两个数之积除以他们的最大公因数
     
    /****** 本代码为递推写法******/
     1 #include <iostream>
     2 int main()
     3 {
     4     int m, n;
     5     scanf("%d%d", &n, &m);
     6     while (n)
     7     {
     8         int t = n;
     9         n = m % n;
    10         m = t;
    11     }
    12     printf("%d", m);
    13     return 0;
    14 }
     
    /****** 本代码为递归写法******/
     1 #include <stdio.h>
     2 long long gcd(long long m,long long n) {
     3     if(n) return gcd(n,m%n);
     4     else return m;
     5 }
     6 int main() {
     7     long long n, m;
     8     while(scanf("%d%d",&n,&m) != EOF) {
     9         printf("%d
    ",gcd(m,n));
    10     }
    11     return 0;
    12 }
  • 相关阅读:
    配置java环境变量
    编写Java中的第一个Java程序:HelloWorld(你好世界:问世)
    对Java的加载与执行的理解(理论比较重要)
    JDK、JRE、JVM三者之间的关系?
    Java语言的特性
    计算机编程语言发展史
    DRF解析器
    DRF分页组件
    DRF频率组件
    DRF权限组件
  • 原文地址:https://www.cnblogs.com/kirk-notes/p/14287264.html
Copyright © 2011-2022 走看看