题解 | 游游的最小公倍数

游游的最小公倍数

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;
}

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务