C - Fadi and LCM

题意:给你一个整数X,求出最小公倍数是X的两个数a,b,并且要求a,b的二者较大值尽可能小。

思路:已知:最大公约数GCD(a,b)=p和最小公倍数LCM(a,b)=q的关系是:q=a*b/p ,即 LCM(a,b)=a * b / GCD(a,b) ——①;

易知当 a∗b=X 时 max(a,b)  最小 ,且① 即 当GCD(a,b)=1 所以直接枚举答案判断。

#include<bits/stdc++.h>
#define LL long long int
using namespace std;
LL gcd(LL a,LL b){
        return b ? gcd(b,a%b):a;
}
LL maxxx(LL c,LL d){
        return c>d ? c:d;
}
int main(){
        LL i,a,b,x,maxx,c,d;
        while(~scanf("%lld",&x)){
                maxx=(LL)9999999999999;
                for(i=1;i*i<=x;i++){
                        if(x%i==0){
                                c=i;
                                d=x/i;
                                if(gcd(c,d)==1&&maxx>maxxx(c,d)){
                                        maxx=maxxx(c,d);
                                        a=c;
                                        b=d;
                                }
                        }
                }
                printf("%lld %lld\n",a,b);
        }
}
View Code

猜你喜欢

转载自www.cnblogs.com/DreamingBetter/p/12203611.html
lcm