最小公倍数与最大公约数的最优算法
下面的是自己写的,大家看看是不是最优算法
#include <iostream>
#include <stdlib.h>
using namespace std;
int g_cd(int m, int n) //我晕,论坛不能用“gcd”
{
int a,b; //小的为a,大的为b
if (m>n)
{
a=n;
b=m;
}
if (m<n)
{
a=m;
b=n;
}
if (m==n)
return m;
int temp=0;
for(;b%a!=0;a=temp%a) //b与a的相除的余数肯定含有最小公倍数
{
temp=b;
b=a;
}
return a;
}
int lcm(int m, int n)
{
int a,b;
a=g_cd(m,n);
if (m>n) //最小公倍数=较大的数*(较小的数/最大公约数)
{
b=n;
b/=a;
return m*b;
}
else
{
b=m;
b/=a;
return n*b;
}
}
int main(int argc, char *argv[])
{
int i,j;
cout<<"enter two ints:"<<endl;
cin>>i>>j;
cout<<"最大公约数:"<<g_cd(i,j)<<endl;
cout<<"最小公倍数:"<<lcm(i,j)<<endl;
system("PAUSE");
return 0;
}