求助
  • 板块学术版
  • 楼主Shq_likes_AC
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/23 13:58
  • 上次更新2024/8/23 15:56:08
查看原帖
求助
1047694
Shq_likes_AC楼主2024/8/23 13:58

请问各位,如何用更低的时间复杂度求使 ∑i=1∞⌊x÷ai⌋(代码中 check 函数)\sum_{i=1}^∞ \lfloor x \div a^i \rfloor \text{(代码中 $check$ 函数)} 值不小于 nn 的最小 xx(nn 和 aa 已给出)。

已有算法的时间复杂度为: O(log2(n×a)(注:二分法边界)×loga(a×n)(注:代码中 check 函数))O(log_2 (n \times a) \text{(注:二分法边界)} \times log_a(a \times n ) \text{(注:代码中 $check$ 函数)} )

已有代码为:

//此处省略部分代码
long long check(int x, int a)
{
	long long tmp = a, ans = 0;
	while (tmp <= x)
	{
		ans += x / tmp;
		tmp *= a;
	}
	return ans;
}
//此处省略部分代码
long long l = 1, r = n * a;
while (l <= r)
{
	if (check(l + r >> 1, a) < n)
		l = (l + r >> 1) + 1;
	else
		r = (l + r >> 1) - 1;
}
cout << l;
2024/8/23 13:58
加载中...