數論之神 牛客國慶集訓派對Day5
阿新 • • 發佈:2018-12-13
題目描述
終於活成了自己討厭的樣子。 這是她們都還沒長大的時候發生的故事。那個時候,栗子米也不需要為了所謂的愛情苦惱。 她們可以在夏日的午後,花大把的時間去研究生活中一些瑣碎而有趣的事情,比如數論。 有一天西柚柚問了栗子米一個題,她想知道中有多少不同的數,這些不同的數字裡面第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; }