题目:Problem - 1285C - Codeforces
题目大意:给定一个数x,输出a, b满足lcm(a, b) = x(即a, b的最小公倍数为x),并且max(a, b)最小。
题解:经分析,得知a, b互质,即gcd(a, b) = 1(a*b = x),为使结果最小,需从sqrt(x) 开始遍历。OK,这就解决了,上代码!
AC代码:
#include<bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b){
return b > 0 ? gcd(b, a%b) : a;
}
long long x;
int main(){
cin>>x;
for(long long i = sqrt(x); i >= 1; --i){
if(x % i == 0 && gcd(i, x/i) == 1){
cout<<i<<" "<<x/i<<endl;
return 0;
}
}
}