欧几里得算法

  欧几里得算法:

  gcd(x,y)=gcd(y,x%y);

  边界条件:if(y==0)return x;

证明:

   我们设gcd(a,b)=d····(1),a=k*b+c····(2),再令a=k1*d,b=k2*d····(3)

   由(2)得c=a-k*b····(4),然后将(1)带入(4)得到:c=k1*d-k*k2*d,即c=(k1-k*k2)*d.

   这样就说明,a%b有d这个约数,因为开始我们设b也有d这个约数,所以gcd(a,b)是b,a%b的一个公约数。

 

 

#include<bits/stdc++.h>
using namespace std;
int a,b;
inline int gcd(int x,int y)
{
    return b?gcd(b,a%b):a;
}
int main()
{
        cin>>a>>b;
    cout<<gcd(a,b)<<endl;
    return 0;
}

 

上一篇:TCP/IP小记


下一篇:OR