一、用三种方法来求两个正整数的最大公约数:辗转相除法、穷举法和辗转相减法。
1、辗转相除法
#include <iostream>
using namespace std;
/*辗转相除法求最大公约数*/
int main()
{
int m,n,j; //定义两个整数
cout<<"请输入两个整数(用空格隔开):"<<endl;
cin>>m>>n;
{
if(m!=0&&n!=0) //判断输入中是否有零值
{
do{
j=m%n;
m=n;
n=j;
}
while(j);
cout<<"最大公约数为:"<<m<<endl;
}
else
cout<<"输入有误,请重新输入"<<endl; //无法求公约数则返回
}
return 0;
}
2、穷举法
#include <iostream>
using namespace std;
/*穷举法求最大公约数*/
int main()
{
int j=0; //定义一个标记
int a,b; //定义两个整数
cout<<"请输入两个整数:"<<endl;
cin>>a>>b;
{
if(a == 0 || b == 0)
cout<<"输入含0数字,请重新输入"<<endl;
else
{
for(j=a; ;j--) //反复执行j
{
if(a%j == 0 && b%j == 0) //若a、b能同时被j整除,j为最大公约数
break;
}
cout<<"最大公约数为:"<<j<<endl;
return j;
}
}
return 0;
}
3、辗转相减法
#include <iostream>
using namespace std;
/*相减法求最大公约数*/
int main()
{
int a,b;
cout<<"请输入两个正整数:"<<endl;
cin>>a>>b;
{
if(a == 0 && b == 0)
cout<<"输入含0数字,请重新输入"<<endl; //检查是否输入含0数字
else
{
while(a!=b)
{
if(a>b) //当a大于b时,用a减去b
{
a=a-b;
}
else
{
b=b-a; //当b大于a时,用b减去a
}
}
cout<<"最大公约数为:"<<a<<endl; //直到a=b时,这时的a(或b)为最大公约数
return a;
}
}
return 0;
}
程序输出结果:
二、求三个正整数的最小公倍数
#include <iostream>
using namespace std;
/*求三个正整数的最小公倍数*/
void main()
{
int m; //定义一个标记
int a,b,c; //定义三个正整数
cout<<"输入三个正整数"<<endl;
cin>>a>>b>>c;
m=a>b? (a>c? a:c):(b>c? b:c); //令m等于a,b,c的最大值
while((m%a !=0) || (m%b!=0) || (m%c!=0))
m++;
cout<<"最小公倍数为:"<<m<<endl;
}