思路:从1到e9中二分找出合适的x,暴力搜索。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5;
int t;
int k,m;
bool check(int x)
{
if (sqrt(x)+floor(log(x)/log(k))-m>0)//floor向下取整函数
{
return true;
}
return false;
}
int main()
{
cin >> t;
while(t--)
{
cin >> k >> m;
int l=1,r=1e9;
while(l<r)//查找左边界。
{
int mid=(l+r)/2;
if (check(mid))
{
r=mid;
}
else
{
l=mid+1;
}
}
cout << l << '\n';
}
}
注意:log在计算机中只有2和10的函数,但如果是求以k为底的函数,就要用到换底公式
floor:向下取整函数。
二分查找右边界: