题目描述
给定两个正整数 a,b,求他们的最大公约数(gcd)和最小公倍数(lcm)。这两个整数均在 int 范围内。
输入格式
两个整数 a 和 b,用空格分隔。
输出格式
两个整数表示答案,用空格隔开。
输入输出样例
输入 #1
6 15
输出 #1
3 30
题目解析
这题可以用辗转相除法解决。
用辗转相除法最好用递归函数解决。
什么是函数?
什么是递归?
函数看这里。
递归看这里。
知道这些,可以写代码了。
用辗转相除法求最大公约数:
int gcd(int a,int b)
{
if(a==0)
return b;
else
return gcd(b,a%b);
}
因为两个数相乘的积也是最大公约数和最小公倍数的积,所以
int lcm=a*b/gcd(a,b);
完整代码
#include<bits/stdc++.h>
using namespace std;
int gcd(int x,int y)
{
if(y==0)
return x;
else gcd(y,x%y);
}
int main()
{
long long n,m;
cin>>n>>m;
long long y=gcd(n,m);
cout<<gcd(n,m)<<' '<<n*m/y;
}
!!!注意这题要用long long 不然会爆内存!!!