zoukankan      html  css  js  c++  java
  • 扩展的欧几里德算法代码

    欧几里德算法用来求2个自然数的最大公约数(GCD),数论有定理指出这两个自然数分别乘以一定的整数系数然后相加可以得到他们的GCD,且该GCD是这两个数组合能得出的最小正整数。扩展的欧几里德算法用来计算这两个数的GCD及相加得到GCD组合系数。

    算法是先用欧几里德算法得出递推方法,然后采用递归。给出了2个递归算法。

    #include<iostream>
    using namespace std;
    
    int x,y,gcd;
    
    void extend_Eulid(int a,int b)
    {
        if (b==0)
        {
            x=1; y=0; gcd=a;
        }
        else
        {
            extend_Eulid(b,a%b);
            int temp=x;
            x=y; y=temp-a/b*y;
        }
    }
    
    void extend_Eulid2(int a,int b)
    {
        if (a%b==0)
        {
            x=0;y=1;gcd=b;
        }
        else
        {
            extend_Eulid(b,a%b);
            int temp=x;
            x=y; y=temp-a/b*y;
        }
    }
    
    int main()
    { 
        int a,b;
        cout<<"Input two numbers:";
        cin>>a>>b;
        if (a<b) swap(a,b);
        
        //extend_Eulid(a,b);
        extend_Eulid2(a,b);
        cout<<"GCD="<<gcd<<"=("<<x<<")*"<<a<<"+("<<y<<")*"<<b<<endl;
        
        system("pause");
        return 0;
    }
    分享到: 更多
    友荐云推荐
  • 相关阅读:
    Web 服务器配置
    Web 浏览
    C++ Web 编程
    C++ 多线程
    C++ 信号处理
    C++ 预处理器
    C++ 模板
    C++ 命名空间
    C++ 动态内存
    C++ 异常处理
  • 原文地址:https://www.cnblogs.com/eternalwt/p/3056034.html
Copyright © 2011-2022 走看看