题解
2026-08-03 15:56:05
发布于:浙江
5阅读
0回复
0点赞
#include<bits/stdc++.h>//万能头
using namespace std;
void aa(){
long long a,b,k;cin>>a>>b>>k;//输入
long long l=1,r=1e18,res;
//使用二分算法前,定义 l 和 r 以及初始值
while(l<=r){
long long mid=(l+r)/2;//老玩家
long long cnt=mid/a+mid/b-mid/(a/__gcd(a,b)*b);
//mid/a = 1~mid中的a的倍数,mid/b = 1~mid中的b的倍数
//a/__gcd(a,b)*b=lcm(a,b)=公倍数
//mid/公倍数 = 1~mid中的lcm(a,b)的倍数(重复)
//cnt=序列个数<----------------------
//样例解释: |
//2 : 2, 4, 6, 8, 10... |
//3 : 3, 6, 9, 12, 15... |
//6 : 6, 12, 18... |
//去重+排序后 : 2, 3, 4, 6, 8, 9...---
if(cnt>=k){res=mid;r=mid-1;}
//如果序列个数<k,那么连第k个都没有
//保存结果并缩小范围(有多个答案,求最小)
else{l=mid+1;}
//否则提高下限
}
cout<<res<<"\n";//输出
}
int main(){
int t;cin>>t;
while(t--){
aa();
}
return 0;//好习惯
}
求点赞
这里空空如也






有帮助,赞一个