不同方法求解两个数的最大公约数代码

来源:互联网 发布:美国休斯网络系统公司 编辑:程序博客网 时间:2024/05/09 21:01
#include<iostream>
using namespace std;
long gys2(long m,long n);
long gys3(long m,long n);
long gys1(long m,long n)//从小到大逐级求最大公约数,2为起始点
{
long d=1,k=2;
if(m==0 && n==0)return 0;
if(m==0) return n;
if(n==0) return m;
if(m<0) m=-m;
if(n<0) n=-n;
for(;k<=m && k<=n;k++)
if(m%k==0&&n%k==0)
d=k;
return d;

}
long gys2(long m,long n)//从m和n中找最小值,从最小值往下求解
{
long k,d;
if(m<0) m=-m;
if(n<0) n=-n;
if(m==0) return n;
if(n==0) return m;
if(m==0 && n==0) return 0;
k=m<n?m:n;
for(;(m%k!=0)||(n%k!=0);k--)
{
}
d=k;
return d;
}
long gys3(long m,long n)//递归求最大公约数,转转相除法。
{
if(m<0) m=-m;
if(n<0) n=-n;
    if(m==0) return n;
if(n==0) return m;
if(m==0 && n==0) return 0;
return m%n==0?n:gys3(n,m%n);
}
void main()
{
long x,y;
cin >>x>>y;
cout<<gys1(x,y)<<endl;
cout<<gys2(x,y)<<endl;
cout<<gys3(x,y)<<endl;
}