求最大公约数和最小公倍数简便方法
- 因为之前都是用循环求得最大公约数和最小公倍数,所以记录一下这个简单快速的方法;
输入
- 若干行,每行两个数字m,n(1<=m,n<=1e5)
输出
- 若干行,为m,n两个数字的最大公因数和最小公倍数
样例输入
3 3
1 5
样例输出
3 3
1 5
代码
#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
//辗转相除法求得最大公约数
int gys(int a,int b){
int s = max(a,b);
int t = min(a,b);
if(s%t==0){
return t;
}else{
return gys(t,s%t);
}
}
main()
{
int n,m;
while(scanf("%d %d",&n,&m)!=EOF){
int s = gys(n,m);
int t = n*m/s; //最小公倍数等于两数之积除以最大公约数
cout<<s<<" "<<t<<endl;
}
}
求最大公约数:
两个数中较大的值除较小的值得到的余数为0则小的值为最大公约数,否则将用较小的数和余数进行重复判断
求最小公倍数
两数之积除以最大公约数