Codeforces Round #640 (Div. 4) C. K-th Not Divisible by n

Codeforces Round #640 (Div. 4)

翻译 岛田小雅

C. K-th Not Divisible by n

出题人 MikeMirzayanov

有两个正整数 nk,输出第 k 个不能被 n 整除的正整数。

举个例子,如果 n=3k=7,那么所有的不能被 3 整除的数是 1,2,4,5,7,8,10,11,13,。这些数里面的第 7 个是 10

输入格式

第一行是一个整型 t (1t1000),代表测试点个数。接下来 t 行每行一个测试点。

每个测试点给你两个正整型,一个 n (2n109),一个 k (1k109)

输出格式

对每个测试点输出第 k 个不能被 n 整除的正整数。

样例输入

6
3 7
4 12
2 1000000000
7 97
1000000000 1000000000
2 1

样例输出

10
15
1999999999
113
1000000001
1

题解

作者 岛田小雅

样例的第 5 个测试点让我悟到了不得了的东西。

以题目中的 3 为例,把不能被 3 整除的数铺开:

1,2,4,5,7,8,10,11,13,14,

现在把能被 3 整除的数塞回去:

1,2,(3,)4,5,(6,)7,8,(9,)10,11,(12,)13,14,

对于 3 来说,每隔 2 个数会少一个数。

那对于 n 来说,就是每隔 n1 个数会少一个数。

所以,k 个数里面少了几个数呢?令缺少的数的数目为 x,不难得出 x=kn1。那么答案就是 k+x ——

——了吗?

仔细想想,如果 k 能被 n1 整除,那我们的 x 就会多算一个。如何避免这种情况呢?

那当然写个条件判断就好啦~(啪)(AC 代码中用了条件运算符

AC 代码

作者 岛田小雅
#include <bits/stdc++.h>
using namespace std;

int t, n, k;

int main()
{
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin >> t;
    while(t--)
    {
        cin >> n >> k;
        cout << k+(k%(n-1)?k/(n-1):k/(n-1)-1/*条件运算符*/) << '\n';
    }
    return 0;
}

作者:岛田小雅

出处:https://www.cnblogs.com/CasseShimada/p/16709671.html

版权:本作品采用「CC BY-NC-SA 4.0」许可协议进行许可。

(。・∀・)ノ゙嗨, 感谢你阅读我的博客。博主是个初来乍到的萌新,如有意见和建议欢迎私信提出嗷!

posted @   岛田小雅  阅读(24)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示