原题链接:http://codeforces.com/contest/1285/problem/C
题目:(借用闫老师的图片,我相信闫老师一定看不到我盗用他的图片)
从1 ~ 根号N枚举就Ok了,首先答案输出的这两个数最好是互质的,也就是说这样可以减少我们很大的工作量
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long LL;
int main()
{
LL n;
cin >> n;
LL mid = sqrt(n);
// 特判一下
if(n == 1)
{
cout << 1 << " " << 1 << endl;
return 0;
}
LL ansl = 1,ansr = 1e18;
LL l,r;
// 1~ 根号N枚举
for(int i = 1;i <= mid;i++)
{
if(n % i == 0)
{
l = i,r = n / i;
// 判断l 和 r的最大公约数是不是1
LL p = __gcd(l,r);
if(p != 1)continue;
LL t = max(l,r);
LL tt = max(ansl,ansr);
if(tt > t && l != r)
{
ansl = l,ansr = r;
}
}
}
cout << ansl << " " << ansr << endl;
return 0;
}