|
|
|
@ -28,26 +28,26 @@ void get_mobius(int n) {
|
|
|
|
|
// 维护u(x)前缀和:梅滕斯函数
|
|
|
|
|
for (int i = 1; i <= n; i++) sum[i] = sum[i - 1] + mu[i];
|
|
|
|
|
}
|
|
|
|
|
int check(int g) {
|
|
|
|
|
int check(int g, int k) {
|
|
|
|
|
int res = 0;
|
|
|
|
|
for (int i = 1; i * i <= g; i++)
|
|
|
|
|
res = res + mu[i] * (g / i / i);
|
|
|
|
|
|
|
|
|
|
return res;
|
|
|
|
|
return res >= k;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
signed main() {
|
|
|
|
|
// 获取莫比乌斯函数值
|
|
|
|
|
get_mobius(N - 1);
|
|
|
|
|
|
|
|
|
|
int t, k;
|
|
|
|
|
cin >> t;
|
|
|
|
|
while (t--) {
|
|
|
|
|
cin >> k;
|
|
|
|
|
int l = 1, r = 2e9, mid, vt;
|
|
|
|
|
int T, k;
|
|
|
|
|
cin >> T; // T组测试数据
|
|
|
|
|
while (T--) {
|
|
|
|
|
cin >> k; // 第k个数
|
|
|
|
|
int l = 1, r = 2e9;
|
|
|
|
|
while (l <= r) {
|
|
|
|
|
mid = (l + r) / 2;
|
|
|
|
|
vt = check(mid);
|
|
|
|
|
if (vt < k)
|
|
|
|
|
int mid = l + r >> 1;
|
|
|
|
|
if (!check(mid, k))
|
|
|
|
|
l = mid + 1;
|
|
|
|
|
else
|
|
|
|
|
r = mid - 1;
|
|
|
|
|