数论之神
题解:除法分块。
如果是
k
≤
n
k\leq \sqrt n
k≤n的话第
k
k
k大的数值就是
⌊
a
k
⌋
\lfloor \frac{a}{k} \rfloor
⌊ka⌋,否则就是
n
+
1
\sqrt n+1
n+1对应的
⌊
n
i
⌋
\lfloor \frac{n}{i} \rfloor
⌊in⌋减掉
k
k
k超过
n
\sqrt n
n的部分然后在加上
1
1
1。
代码
#include<bits/stdc++.h>
int main()
{
int T;
scanf("%d", &T);
while (T--)
{
long long n, k;
scanf("%lld%lld", &n, &k);
long long t = sqrt(n);
long long x, y;
if (t * (t + 1) <= n)
x = t * 2;
else
x = t * 2 - 1;
k = x - k + 1;
if (k <= t)
y = k;
else
y = n / (x - k + 1);
printf("%lld %lld\n", x, y);
}
return 0;
}