[week13] TT的神秘礼物2
文章目錄
- 題意
- Input
- Output
- 輸入樣例
- 輸出樣例
- 提示
- 分析
- 總結
- 代碼
題意
在你們的幫助下,TT 輕松地完成了上一個神秘任務。
但是令人沒有想到的是,幾天后,TT 再次遇到了那個神秘人。
而這一次,神秘人決定加大難度,并許諾 TT,如果能夠完成便給他一個獎勵。
任務依舊只給了兩個數字,分別表示 n 和 k,不過這一次是要求 TT 給出無法被 n 整除的第 k 大的正整數。
例如 n = 3,k = 7,則前 7 個無法被 n 整除的正整數為 [1 2 4 5 7 8 10],答案為 10。
好奇的 TT 想要知道獎勵究竟是什么,你能幫幫他嗎?
Input
第一行一個整數 T,表示數據組數,不超過 1000。
之后 T 行,每一行給出兩個正整數,分別表示 n(2 ≤ n ≤ 1e9)、k(1 ≤ k ≤ 1e9)。
Output
對于每一組數據,輸出無法被 n 整除的第 k 大的正整數。
輸入樣例
6
3 7
4 12
2 1000000000
7 97
1000000000 1000000000
2 1
輸出樣例
10
15
1999999999
113
1000000001
1
提示
分析
- 題目分析
這道題不再是拆分,而是在正整數序列中根據規律找數字。
稍微演算就會發現,第k個不被整除的數實際上是完整數列中第 (k + 該數字之前所有可被整除數的個數)個數字,其實答案就是(k + 該數字之前所有可被整除數的個數),因為正整數序列 從1開始。
問題:
最開始的思路就是累加判定第k個不被整除數究竟在第幾個可被整除數的前面,最后直接輸出在前面所有可被整除數個數 + k。
不過這種做法會tle。其實我在檢驗的時候就感覺到了這種做法是肯定會超時的,但是我還是拿到vj上試了一下,果然超時。那么就需要簡化該思路了。
顯然該思路是正確的,那么簡化這個思路的算法該如何做呢?
我想到的是列不等式。因為這個規律顯然可以利用數學公式列出,那么只要讓計算機知道這個數學公式如何解就可以了。
設第k個不被整除數在第i個可被整除數的前面,可化為公式:k + i - 1 < n * i
則轉換后得到關于i的不等式為:(k - 1) / (n - 1) < i
而答案即為:k + i - 1
- ***問題 ***
總結
代碼
// // main.cpp // lab2 // //#include <iostream> using namespace std;int main() {ios::sync_with_stdio(false);int t = 0,n = 0,k = 0,m = 0;cin>>t;while( t-- ){cin>>n>>k;m = (k - 1) / (n - 1); //k + i - 1 < n * i ——> (k - 1) / (n - 1) < icout<<k + m<<endl; //ans = k + i - 1}return 0; }總結
以上是生活随笔為你收集整理的[week13] TT的神秘礼物2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何选择与自己合适的服装颜色搭配
- 下一篇: P4779 【模板】单源最短路径(标准版