算法思路:给定两个数,求它们的最大公约数和最小公倍数。
1.辗转相除法:将两个数作为被除数和除数,每次用被除数除以除数,然后除数作下一轮除法的被除数,余数作下一轮除法的除数,循环进行直至余数为0,此时除数即为最大公约数,最小公倍数用原来两个数的乘积除以最大公约数即可得到。
2.更相减损法:将两个数作为被减数和减数,每次用被减数减去减数,然后减数用作下一轮减法的被减数,商作为下一轮减法的减数,循环进行直至商为0,此时被减数或减数即为最大公约数,最小公倍数用原来两个数的乘积除以最大公约数即可得到。
#include<iostream>
using namespace std;
int gcd1(int m,int n){ //定义辗转相除法函数
int t;
while(n!=0)
{
t=m%n;
m=n;
n=t;
}
return m;
}
int gcd2(int m,int n){ //定义更相减损法函数
int t;
while(m!=n){
if(m<n)
swap(m,n);
t=m-n;
m=n;
n=t;
}
return m;
}
int main(){
int a,b;
cout<<"请输入两个正整数"<<endl;
cin>>a>>b;
cout<<"使用辗转相除法"<<endl;
cout<<"最大公约数为"<<gcd1(a,b)<<endl<<"最小公倍数为"<<a*b/gcd1(a,b)<<endl;
cout<<endl;
cout<<"使用更相减损法"<<endl;
cout<<"最大公约数为"<<gcd2(a,b)<<endl<<"最小公倍数为"<<a*b/gcd2(a,b)<<endl;
return 0;
}