一、题目
1、题目描述
2、输入输出
2.1输入
2.2输出
3、原题链接
二、解题报告
1、思路分析
考虑 lcm(1, n - 1) = n - 1,所以 我们的答案(a, b) 必须满足 lcm(a, b) <= n - 1
不妨设 a <= b
a * b / gcd = lcm(a, b) <= n - 1
由于 b >= n / 2
故 a <= gcd, 而 a >= gcd,故 b 为 a 的倍数
进而推出 a 是 n 的因子
则有 lcm = a * (n - a) a = n - a,故lcm 最小,a最大
我们求n 的最大的>= 2的因子即可
2、复杂度
时间复杂度: O(t sqrt(n))空间复杂度:O(1)
3、代码详解
#include <bits/stdc++.h>
#define sc scanf
using i64 = long long;
using PII = std::pair<int, int>;
constexpr int inf32 = 1e9 + 7;
constexpr i64 inf64 = 1e18 + 7;
// #define DEBUG
void solve()
{
int n;
std::cin >> n;
int maf = 1;
for (int i = 2; i * i <= n; ++ i) {
if (n % i == 0) {
maf = n / i;
break;
}
}
std::cout << maf << ' ' << (n / maf - 1) * maf << '\n';
}
int main()
{
#ifdef DEBUG
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
std::ios::sync_with_stdio(false), std::cin.tie(nullptr), std::cout.tie(nullptr);
int _ = 1;
std::cin >> _;
while (_--)
solve();
return 0;
}