zoukankan      html  css  js  c++  java
  • 公约数算法

    /*
    对于已知的两个自然数m, n,假设m>n
    计算m除以n,将得到的余数记做r
    如果r=0,则此时的n为求得的最大公约数。否则,将n的值保存在m中,将r的值保存在n中,
    重复执行下去。
    */
    
    //欧几里得->辗转相除法
    
    
    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <stdlib.h>
    #include <iostream>
    #include <iomanip>
    #include <algorithm>
    
    using namespace std;
    
    int gcd(int a, int b)
    {
        int m, n, r; //m大 n小
        if(a>b)
        {
            m=a; n=b;
        }
        else
        {
            m=b; n=a;
        }
        r=m%n;
        while(r!=0)
        {
            m=n;
            n=r;
            r=m%n;
        }
        return n;
    }
    
    int main()
    {
        int n, m, dd;
        while(scanf("%d %d", &n, &m)!=EOF)
        {
            dd=gcd(n, m);
            printf("%d
    ", dd);
        }
        return 0;
    }
    
    /*
    欧几里得算法的执行效率很高,但是如果参与运算的数据非常大的话就暴露了缺点。
    计算机中的整数最多是64位,如果低于64位,取模运算比较简单,直接用%就行。
    但是如果对于计算两个超过64位的整数的模,gcd算法效率十分低,这是便有了Stein算法。
    */
    
    
    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <stdlib.h>
    #include <iostream>
    #include <iomanip>
    #include <algorithm>
    
    using namespace std;
    
    int Stein(int a, int b)
    {
        int m, n, r;
        if(a>b)
        {
            m=a; n=b;
        }
        else
        {
            m=b; n=a;
        }
        if(n==0)
          return m;
        if(m%2==0 && n%2==0 )
        {
            return 2*Stein(m/2, n/2);
        }
        if(m%2==0)
          return Stein(m/2, n);
        if(n%2==0)
          return Stein(m, n/2);
        return Stein((m+n)/2, (m-n)/2);
    }
    
    int main()
    {
        int n, m, dd;
        while(scanf("%d %d", &n, &m)!=EOF)
        {
            dd=Stein(n, m);
            printf("%d
    ", dd);
        }
        return 0;
    }
    
  • 相关阅读:
    关于软件开发代码的纯洁问题
    乱七八糟
    苹果屏幕变化问题
    注意
    eclipse juno创建maven web项目目录生成方法
    Verilog HDL建模(四)
    Verilog HDL建模(三)
    Verilog HDL建模(二)
    Verilog HDL建模(五)
    Verilog HDL的建模学习(一)
  • 原文地址:https://www.cnblogs.com/yspworld/p/4066037.html
Copyright © 2011-2022 走看看