题意: 求 $1 \le x \le \sqrt[m]{n}$,正整数解 $x$ 的个数。

  1. 方法一:利用 cmath 函数库应该可以 $Θ(1)$ 解决掉此题。

  2. 方法二:快速幂 $+$ 枚举。

  3. 方法三:现在考虑用二分来做,$l = 1,r = n$,然后每次求出 $x^m$ 判断与 $n$ 的大小进行二分。需要注意的是,当 $mid = 1$ 要格外注意,若计算 $1^{10^9}$ 循环会超时,所以只要特判即可。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <cstdio>
using namespace std;
int main ()
{
int n,m;
scanf ("%d%d",&n,&m);
int l = 1,r = n;
while (l <= r)
{
int mid = (l + r) >> 1;
long long ans = 1;bool ok = 1;//注意开 long long
for (int i = 1;i <= m;++i)
{
if (mid == 1) break;//为 1 的情况特判
ans *= mid;
if (ans > n)//分界线判断
{
ok = 0;
break;
}
}
if (!ok) r = mid - 1;
else l = mid + 1;
}
cout<<l - 1<<endl;
return 0;
}