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 }
  • 相关阅读:
    DataGrid 应用合集
    [转]UBB C#完全版
    IE 7中的快捷键
    DataGrid 单击变色,鼠标经过变色 部分代码
    17种正则表达式
    单无格内强制换行
    图片上传,并自动生成缩略图!
    layout_weight学习心得
    android 手势
    java陷进一
  • 原文地址:https://www.cnblogs.com/kirk-notes/p/14287264.html
Copyright © 2011-2022 走看看