题意:给你一个整数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 所以直接枚举答案判断。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#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 ",a,b); } }