CF1925B A Balanced Problemset? 题解

题目链接

洛谷链接

分析:

我们设分成的 n 个子任务为 a1an,即最大化 gcd(a1,a2,,an)

设这个答案为 ansa1=A1×ans,a2=A2×ans,,an=An×ans,那么这 n 个数的和为 ans(A1+A2++An)

显然,A1+A2++Ann。所以我们枚举 1ansx,当 ans|x 时,判断 xansans 是否能构成答案,即 ansxans 分别是否大于 n,再取满足条件的 ans 中最大值即可。

复杂度 O(tx)

#include<bits/stdc++.h>
using namespace std;
int t,x,n,ans;
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin >> t;
	while(t--){
		ans = 0;
		cin >> x >> n;
		for(int i = 1;i * i <= x;i++){
			if(!(x % i)){
				if(i >= n)
					ans = max(ans,x / i);
				else if(x / i >= n)
					ans = max(ans,i);
			}
		}
		cout << ans << '\n';
	}
	return 0;
}
posted @   5t0_0r2  阅读(64)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示