假设一个数为 n ,那么不能被 n 整除的数(标红):
[1, n - 1], 这段一共 n - 1 个数
n,
[n + 1, 2n - 1], 这段一共 n - 1 个数
2n,
[2n + 1, 3n - 1], 这段一共 n - 1 个数
以此类推....
我们需要做的事说白了就是找到第 k 个数在哪?
这样想:
我是第 k 个数,而每一段区间有 n - 1 个数,那么我就是在第 k / (n - 1)段区间里。
但是程序里的除法都是向下取整, 例如5 / 2 == 2,所以分两种情况:
k % (n - 1) == 0,那么我是第 k / (n - 1) 段区间的最后一个数:
段数 * n - 1,即 k / (n - 1) * n - 1
k % (n - 1) != 0, 那么我在第 k / (n - 1) 段的下一段,
除了前 k / (n - 1) 段的 k / (n - 1) * n - 1 个数以外,
还有 [ 下一段首, 第 k 个数 ] 这个区间中的这些数。
( 区间 [a, b] 中有 b - a + 1 个数 )
#include<bits/stdc++.h>
using namespace std;
int main() {
int n, k, t;
cin >> t;
while(t--) {
cin >> n >> k;
if(k % (n - 1) == 0)
cout << k / (n - 1) * n - 1 << endl;
else
cout <<
k / (n - 1) * n - 1
+ ( k - k / (n - 1) * (n - 1) ) + 1
// 前面有 k / (n - 1) * (n - 1)个数
// 段数 * 每段个数
<< endl;
}
return 0;
}