题目描述
给定两个正整数 a,b,求他们的最大公约数(gcd)和最小公倍数(lcm)。这两个整数均在 int 范围内。
输入格式
两个整数 a 和 b,用空格分隔。
输出格式
两个整数表示答案,用空格隔开。
输入输出样例
输入 #1
6 15
输出 #1
3 30
思路
通过不断取模来求出a,b的最大公约数.我们计算发现:lcm(a,b)=a*b/gcd(a,b).所以只要求出了a,b的最大公约数,就可以算出a,b的最小公倍数.
注意!! 这道题如果不用 long long 会出问题.
如果你不使用 long long 写代码,将会是这个样子:
不用 long long 不行.
AC代码
#include <bits/stdc++.h>
using namespace std;
long long g,l;
void gcd(long long a,long long b) //求a,b的最大公约数
{
long long s=a%b;
if(s==0)
{
g=b;
return;
}
gcd(b,s);
}
void lcm(long long a,long long b) //求a,b的最小公倍数
{
long long s=a*b/g;
l=s;
return;
}
int main()
{
long long a,b;
cin>>a>>b;
gcd(max(a,b),min(a,b));
lcm(a,b);
cout<<g<<" "<<l<<endl;
return 0;
}
测试点信息