【题目描述】设两个正整数的最大公约数是 G,最小公倍数是 L,那么这两个正整的和最小是多少?请编程解决这个问题。
【输入】
两个不大于 10000 的正整数 G 和 L,中间用单个空格隔开。数据保证 L是 G 的倍数。
【输出】
一个正整数,即最小的和。
【输入样例】
14 280
【输出样例】
126
方法一:
#include <iostream>
using namespace std;
int gcd(int a,int b){ //计算两个数的最大公约数
return (b==0)?a:gcd(b,a%b);
}
int main()
{
int a,b;
int count=0,min=10000;
int sum[10000];
for(int i=0;i<10000;i++) sum[i]=0;
cin>>a>>b;
if(b%a==0){ //判断输入的数是否为整除关系
int c=b/a; //如果不是整除关系则一定没有结果
for(int x=1;x<=c;x++){ //遍历一直到c
if(c%x==0) { //取c的因数
int m=x*a; //计算第一因数 m
int n=c/x*a; //计算第二个因数 n
if(a==gcd(m,n)){ //判断m和n能否取到以a为最大公约数
sum[count]=m+n;
count++; //是则计数加1
}
}
}
}else count=0; //不能整除,一定是0;
for(int i=0;i<count;i++){
if(sum[i]<min)
min=sum[i];
}
cout<<min<<endl;
return 0;
}
方法二:
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main(){
int G,L;
cin>>G>>L;
int sum=0;
sum=ceil(2*sqrt(G*L)); //a+b>=2(a*b)^(1/2);基本不等式
cout<<sum;
return 0;
}