题意:
给定定值n,使得a+b=n, ans = lcm(a, b), 求ans的最小值
思路:
显然,由a+b = n得出a*b>=n-1,设x = gcd(a, b), c*x + d*x = n, 得到 c+d=n/x,c*d>=n/x-1又因为lcm(a, b) = c*d*x, 所以得到lcm(a, b) = c*d*x >= n-x。显然让lcm最小就要使x最大,即a 和 b的最大公约数最大化。因为(c+d)*x = n, 将x和a+b看作n的两个因子,则x就为最大不等于n的因子,因为a>0,b>0;
void solve() {
int a = 1, n; cin >> n;
for (int i = 2; i * i <= n; i++)if (n % i == 0) { a = n / i; break; }
cout << a << ' ' << n - a << '\n';
}
signed main()
{
IO;
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
int T; cin >> T;
while (T--)solve();
return 0;
}