1. 程式人生 > >數論之神 牛客國慶集訓派對Day5

數論之神 牛客國慶集訓派對Day5

題目描述

終於活成了自己討厭的樣子。 這是她們都還沒長大的時候發生的故事。那個時候,栗子米也不需要為了所謂的愛情苦惱。 她們可以在夏日的午後,花大把的時間去研究生活中一些瑣碎而有趣的事情,比如數論。 有一天西柚柚問了栗子米一個題,她想知道中有多少不同的數,這些不同的數字裡面第k大的是多少。

輸入描述:

第一行一個整數T(T≤ 105),表示資料組數。
每組資料第一行兩個整數,表示n,k(1≤ n≤ 1018),保證k不會超過不同的數字個數。

輸出描述:

對於每組資料輸出,輸出兩個整數,表示有多少個不同的數字和這裡面第k大的是多少。

示例1

輸入

複製

3
1 1
5 2
67 8

輸出

複製

1 1
3 2
15 8

程式碼:

#include <bits/stdc++.h>
#define  ll long long
using namespace std;
int main()
{
   int T;
   cin>>T;
   while(T--)
   {
   	ll n,k;
   	ll ans1,ans2;
   	scanf ("%lld %lld",&n,&k);
   	ll t = (ll)sqrt(n);
    if(t*(t+1) <= n) 
	ans1 = 2*t;
    else             
	ans1 = 2*t-1;
    if(k == 1) 
	ans2 = n;
    else if(k<=t)       
	ans2 = n/k;
	else
	ans2=(ans1-k+1);
    printf("%lld %lld\n",ans1,ans2);
   }
   return 0;
}