辗转相除法
两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。直至可以整除
#include<iostream>
#include<cmath>
using namespace std;
int test (int a,int b)
{
int temp;
if(a<b)//该步可以不要,算法会自动调整最终使第一参数不小于第二参数
{
temp=a;
a=b;
b=temp;
}
if(a%b==0)
return b;
else
return test(b,a%b);
}
int main()
{
int n,m,i,j,a,b;
int sum=1;
int num=0;
while(cin>>n>>m)
{
sum=test(n,m);
//cout<<sum<<endl;
cout<<n/sum*m;
}
}
更相减损术
两个正整数a和b(a>b),它们的最大公约数等于a-b的差值c和较小数b的最大公约数。
#include<cmath>
using namespace std;
int test (int a,int b)
{
//cout<<a<<" "<<b<<endl;
if(a==b)
return b;
if(a>b)//该步可以不要,直接return test即可,如此书写逻辑清晰一些
return test(b,a-b);
else
return test(a,b-a);
}
int main()
{
int n,m,i,j,a,b;
int sum=1;
int num=0;
while(cin>>n>>m)
{
sum=test(n,m);
cout<<sum<<endl;//最大公约数
cout<<n/sum*m;//最小公倍数
}
}
链接一个,讲的非常好