首页 > 代码库 > 最大公约数和最小公倍数算法实现

最大公约数和最小公倍数算法实现

 

最大公约数

1. 用最基本的循环遍历的方法

2. 用辗转相除法

3. 用辗转相减法

 

See also:  http://baike.baidu.com/view/47637.htm

 

 1 #include<iostream> 2 using namespace std; 3  4 int CommonDivisor( int x, int y); 5 int CommonMultiple(int x, int y); 6 int CommonDivisor1( int x, int y); 7 int CommonMultiple2(int x, int y); 8 int CommonDivisor2(int x, int y); 9 int getDif(int x, int y);10 int main()11 {12     int a, b;13     cout << "Please input two integer: ";14     cin>>a >>b;15 16     cout<<CommonDivisor(a,b)<< endl;17     cout<<CommonMultiple(a,b)<< endl;18     cout<<"-----------------------------------"<< endl;19     cout<<CommonDivisor1(a,b)<< endl;20     cout<<CommonMultiple2(a,b)<< endl;21 22     cout<<"-----------------------------------"<< endl;23     cout<<CommonDivisor2(a,b)<< endl;24 25     cout<<endl;26 27 }28 29 int CommonDivisor1( int x, int y)30 {31     //最大公约数一定在1和X和Y较小的值之间,因此从x和y之间较小的值开始循环遍历,找到最大的公约数32     int start = x;33     if(x > y)34         start = y;35     for (int i = start; i >=1; i--)36     {37         if(x % i ==0 && y % i == 0)38             return i;39     }40     return 1;41 }42 43 int CommonDivisor2(int x, int y)44 {45     //辗转相减法46     if(x % 2 ==0 && y % 2 == 0)47         return 2 * CommonDivisor2(x / 2, y / 2);48     else49     {50         return getDif(x,y);51     }52 }53 54 int getDif(int x,int y)55 {56     int larger = x;57     int smaller = y;58     if(x < y)59     {60         larger = y;61         smaller = x;62     }63     int dif =  larger - smaller;64     if(dif == smaller )65         return dif;66     else67         return getDif(smaller, dif);68 }69 70 int CommonDivisor( int x, int y)71 {72     //辗转相除法73     if(x== 0)74         return y;75     return CommonDivisor(y %x , x);76 }77 int CommonMultiple(int x, int y)78 {79     //最小公倍数是x和y的乘积 再除以x和y的最大公约数 所的出来的值80     int cd = CommonDivisor(x,y);81     return ((x * y ) / cd);82 }83 int CommonMultiple2(int x, int y)84 {85     //最小公倍数是的值一定在x和y中较大者和xy乘积之间,所以从小到大遍历找到这个数字86     int start = x;87     int end = x * y;88     if(x < y)89         start = y;90     for(int i = y ; y <= end; i++)91     {92         if(i % x ==0 && i % y == 0)93             return i;94     }95     return end;96 }

 

最大公约数和最小公倍数算法实现