C++,codeforces, 1352C, C. K-th Not Divisible by n
/* 题目描述: 给定n和k,求从1开始的第k个不被n整除的数 */ #include <iostream> /* 令ans = x(以下过程除法结果均向下取整(int相除),用[]表示向下取整符号) 则x应满足 [x/n]+k=x , n,k均为输入 即在[1--x]内共有x个数字,其中有k个不被n整除, 即 x个数 = k个数 + [x/n]个数 有时,上式可以有两个解,一个是x,另一个是x-1,其中x为n的倍数,此时应取x-1 x = an+b(0<=b<=n-1) ==> a+k=an+b ==> k=a(n-1)+b b = k%(n-1) b==0时, k=a(n-1), a=[k/(n-1)] x = an+b = [k/(n-1)]*n 但是此时,x也是n的倍数, x本身需要除去, 此时[1--x-1]内已有k个不被n整除的数,因此x应减1, 即x = [k/(n-1)]*n-1 [k/(n-1)]*n - 1 b==(n-1)时, k=(a+1)(n-1) , 则[k/(n-1)]=a+1 x = an+b = ([k/n-1]-1)*n + (n-1) = [k/(n-1)]*n-1 [k/(n-1)]*n - 1 b!=n-1时,1<=b<=(n-2) ==> a=[k/(n-1)], b=k%(n-1) x = an+b = [k/(n-1)]*n + k%(n-1); [k/(n-1)]*n + k%(n-1) 由于前两种情况k%(n-1) = 0,可以在表达式后加上"k%(n-1)"而不影响结果 可以统一为 x = [k/(n-1)]*n + k%(n-1) */ void solve2(){ int n,k;std::cin>>n>>k; int ans = (k/(n-1))*n+k%(n-1) - (k%(n-1)==0); std::cout<<ans<<std::endl; } /* 先让ans = k 先假设ans为第k个数,其中[1--k]中有k/n个能被n整除的数,它们不算在计数内 因此第k个数应为第k-k/n个数, 则让ans前进k/n个数,即ans += k/n 之后再检查前进的范围内是否有新的能被n整除的数, 如果有,说明前进后仍达不到第k个,需要再前进范围内能被n整除的数的个数 重复直到前进的范围内没有新的能被n整除的数 */ void solve(){ int n,k;std::cin>>n>>k; int counted = 0; int ans = k; while(ans/n > counted){ int temp = ans/n; ans += temp-counted; counted = temp; } std::cout<<ans<<std::endl; } int main(){ int t;std::cin>>t; while(t--){ solve2(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2024-02-06 (C语言)代码学习||2024.2.6||题目是codewars上的【 IP Validation】
2024-02-06 (python)代码学习||2024.2.4||题目是codewars的【 All Balanced Parentheses】