CF1925B A Balanced Problemset? 题解
CF1925B 题解
题目链接
题目大意
有一个长度为
多测。
简要思路
首先先给出结论:
最终的答案一定是
接下来我通过两种方法证明:
一、类似于“更相减损法”
一个序列的
即我们设该序列为
因为
考虑证明 一个序列的 gcd 等于该序列前缀和后的 gcd
的正确性:
即证明
我们用类似于“更相减损法”来证明。
我们设
设
由于
所以我们就证得结论:
二、通过子序列来表示
我们设该序列为
因为
所以
用人话来解释一下,就是通过
以上就是两种证明方法。
知道了答案一定是
现在我们考虑
所以该序列的每个数都为
但如果当前的因子
因此我们只需枚举
但是要注意,
复杂度
完整代码
#include<bits/stdc++.h> #define int long long #define endl '\n' int T,x,n; signed main(){ std::ios::sync_with_stdio(false); std::cin.tie(0); std::cin>>T; while(T--){ std::cin>>x>>n; int maxn=-1; for(int i=1;i*i<=x;i++){//平凡因子分解 if(x%i==0){ if(i*n<=x)maxn=std::max(maxn,i); if(x/i*n<=x)maxn=std::max(maxn,x/i); } } std::cout<<maxn<<endl; } return 0; }
THE END.
THANK YOU.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步