求最大公约数最常见的也是效率比较好的算法是欧几里得算法也叫做辗转相除法。
最大公约数和最小公倍数的代码如下:
//最大公约数 gcd 和最小公倍数的求解
#include<iostream>
using namespace std;
int fun(int a,int b)
{
int m,n,c;
if (b==0)
return 0;
else if(a<b)
{
int temp;
temp=b;
b=a;
a=temp;
}
m=a;
n=b;
while(b!=0)
{
c=a%b;
a=b;
b=c;
}
cout<<"最大公约数:"<<a<<endl;
cout<<",,,,,,,,,";
cout<<"最小公倍数:"<<m*n/a<<endl;
}
int main()
{
int a,b;
/*cin>>"请输入a和b:";*/
cin>>a>>b;
fun(a,b);
return 0;
}
算法分析:求最大公约数:假设a=kb+r(1),b=k1*r+r1(2),若c是(2)中b和r的公约数,则回到(1)中c也是a的公约数,所以gcd(a,b)和gcd(b,a%b)有相同的公约数,所以可以递归或者循环实现此算法。
最小公倍数即a与b的乘积除以他们的最大公约数。