时间限制1.00s 内存限制128.00MB 难易度:普及−
【题目描述】
给定两个正整数 a,b,求他们的最大公约数(gcd)和最小公倍数(lcm)。这两个整数均在 int 范围内。
【输入格式】
两个整数 a 和 b,用空格分隔。
【输出格式】
两个整数表示答案,用空格隔开。
【输入输出样例】
输入 #1
6 15
输出 #1
3 30
【算法分析】
求最大公约数可以用辗转相除法,求最小公倍数可以用两数乘积除以其最大公约数。
【参考代码】
#include <bits/stdc++.h>
using namespace std;
long long gcd(int n,int m)
{
while(m)
{
int t=n%m;
n=m;
m=t;
}
return n;
}
long long lcm(int n,int m)
{
return n/gcd(n,m)*m;
}
int main()
{
int a,b;
// freopen("../in.txt","r",stdin);
// freopen("../out.txt","w",stdout);
cin>>a>>b;
cout<<gcd(a,b)<<" "<<lcm(a,b);
return 0;
}
2024.5更新:最大公约数递归求法:
int gcd(int m,int n)
{
return n==0?m:gcd(n,m%n);
}