三种方法求最大公约数和最小公倍数标题
首先明确最大公约数和最小公倍数的关系,设两个数为a,b;最大公约数为c,最大公倍数为d;
则ab=cd;怎么得到的可以通过数学算式证明。
分别用暴力搜索法,辗转相除法,更相减损法求最大公约数,求出最小公约数就求出了最小公倍数。
#include<iostream>
using namespace std;
int main()
{
//变量a,b为所求的两个数,由键盘输入;c是最大公约数,i为控制循环变量的整数,
//t为每种方法需要用到的整数
int a,b,c=0,i;
cout<<"请输入两个整数,求它们的最小公倍数"<<endl;
cin>>a>>b;
for(a>b?i=b:i=a;i>=1;i--) //暴力搜索法求公约数
if(a%i==0&&b%i==0)
{
c=i;
break;
}
cout<<"暴力搜索法求解最小公倍数:"<<a*b/c<<endl;
//根据最大公约数和最小公倍数之间的关系输出最小公倍数
int t1=a,t2=b; //辗转相除法求公约数
while(t1%t2!=0) //辗转相除循环
{
int t3=t2;
t2=t1%t2;
t1=t3;
}
c=t2;
cout<<"辗转相除法求最小公倍数:"<<a*b/c<<endl;
int t4,t5; //更相减损法求公约数
if(a>b)
t4=a,t5=b;
else
t4=b,t5=a;
c=t4-t5; //初始化公约数
while(t5!=c)
{
t5>c?t4=t5,t5=c:t4=c;
c=t4-t5; //相减
}
cout<<"更相减损法求最小公倍数:"<<a*b/c<<endl;
return 0;
}