题解:
根据分块,我们可以知道, x = s q r t ( n ) x=sqrt(n) x=sqrt(n)当 x ∗ ( x + 1 ) = = n x*(x+1)==n x∗(x+1)==n的时候一共有 2 ∗ s q r t ( n ) 2*sqrt(n) 2∗sqrt(n)个不同的数,不然有 2 ∗ s q r t ( n ) − 1 2*sqrt(n)-1 2∗sqrt(n)−1个数。然后就是第k的的数是多少的问题。令 r e s = 2 ∗ s q r t ( n ) 或 r e s = 2 ∗ s q r t ( n ) − 1 res=2*sqrt(n)或res=2*sqrt(n)-1 res=2∗sqrt(n)或res=2∗sqrt(n)−1当k>=x的时候答案就是 r e s − k + 1 , 否 则 就 是 n / k res-k+1,否则就是n/k res−k+1,否则就是n/k
#include
#define int long long
using namespace std;
signed main()
{
int t; cin>>t;
while(t--){
int n,k; cin>>n>>k;
int x=sqrt(n);
int res=2*sqrt(n)-1;
if(x*(x+1)==n) res++;
cout<<res<<' ';
if(k>=x) cout<<res-k+1<<endl;
else cout<<n/k<<endl;
}
}