辗转相除法
2022-06-29 本文已影响0人
与时间共舞
辗转相除法(欧几里得算法)
求两个数的最大公约数和最小公倍数?
1、最大公约数
思路:大数除以小数,如果能够整数,
则小数是最大公约数,如果不能
整除,则用除数作为被除数继续
除以余数,直到能够整除,那么
除数就是最大公约数
2、最小公倍数
思路:根据公式求解
两个数的乘积
=最大公约数*最小公倍数
#include<iostream>
using namespace std;
int gcd(int x, int y){ //最大公约数
int t = x%y; //求余数
while(t!=0){ //判断余数为0
x=y;
y=t;
t=x%y;
}
return y;
}
int lcm(int x, int y){ //最小公倍数
int t = gcd(x,y);
return (x*y/t);
//两个数的乘积=最大公约数*最小公倍数
}
int main(){
int a,b;
cin>>a>>b;
cout<<"最大公约数:"<<gcd(a,b)<<endl;
cout<<"最小公倍数:"<<lcm(a,b)<<endl;
return 0;
}