题解 | 游游的最小公倍数
游游的最小公倍数
https://www.nowcoder.com/practice/385c7aa397e54bb58f36286ab0d65156
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
using ull=unsigned long long;
using i128=__int128_t;
using u128=__uint128_t;
using ld=long double;
void solve()
{
ll n;//首先我们要知道lcm=a*b/gcd 因此 我们要增大a*b 减小gcd a*b是一个二次函数 求导可知a=n/2时最大 所以我们从a=n/2开始寻找最小gcd 我们只需要找到一组互质的数使gcd=1
cin >> n;
if(n==2)//当2时 特判
{
cout << 1 << " " << 1 << "\n";
return;
}//其他情况 如果n是奇数 那么直接除以2 另外一部分加上1即可 两个相邻的数 gcd一定是1
if(n%2==1) cout << n/2 << " " << n/2+1 << "\n";
else //如果n是偶数 那直接除以2 然后分两种情况讨论即可
{
if(n/2%2==1) cout << n/2-2 << " " << n/2+2 << "\n";
else cout << n/2-1 << " " << n/2+1 << "\n";
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t=1;
cin >> t;
while(t--)
{
solve();
}
return 0;
}