【878. 第 N 个神奇数字】
创始人
2024-02-09 15:15:45
0

来源:力扣(LeetCode)
描述:

一个正整数如果能被 a 或 b 整除,那么它是神奇的。

给定三个整数 n , a , b ,返回第 n 个神奇的数字。因为答案可能很大,所以返回答案 对 109 + 7 取模 后的值。

示例 1:

输入:n = 1, a = 2, b = 3
输出:2

示例 2:

输入:n = 4, a = 2, b = 3
输出:6

提示:

  • 1 <= n <= 109
  • 2 <= a, b <= 4 * 104

方法一:容斥原理 + 二分查找

思路与算法

  题目给出三个数字 n,a,b,满足 1 ≤ n ≤ 109 , 2 ≤ a, b ≤ 4 × 104 ,并给出「神奇数字」的定义:若一个正整数能被 a 和 b 整除,那么它就是「神奇」的。现在需要求出对于给定 a 和 b 的第 n 个「神奇数字」。设 f(x) 表示为小于等于 x 的「神奇数字」个数,因为小于等于 x 中能被 a 整除的数的个数为 ⌊ x/a ⌋,小于等于 x 中能被 b 整除的个数为 ⌊ x/b ⌋,小于等于 x 中同时能被 a 和 b 整除的个数为 ⌊ x/c ⌋,其中 c 为 a 和 b 的最小公倍数,所以 f(x) 的表达式为:
1

即f(x) 是一个随着 x 递增单调不减函数。那么我们可以通过「二分查找」来进行查找第 n 个「神奇数字」。

代码:

class Solution {
public:const int MOD = 1e9 + 7;int nthMagicalNumber(int n, int a, int b) {long long l = min(a, b);long long r = (long long) n * min(a, b);int c = lcm(a, b);while (l <= r) {long long mid = (l + r) / 2;long long cnt = mid / a + mid / b - mid / c;if (cnt >= n) {r = mid - 1;} else {l = mid + 1;}}return (r + 1) % MOD;}
};

2

复杂度分析
时间复杂度: O(log(n × max(a, b))),其中 n,b,c 为题目给定的数字。
空间复杂度:O(1),仅使用常量空间开销。

方法二:找规律

思路与算法

  通过「方法一」我们也可以知道小于等于 x × c 的「神奇数字」个数 f(x × c) = q × f© = x × ( c/a + c/b − 1) 个,其中 c 为 a 和 b 的最小公倍数,x 为非负整数。令 m = f©,n = q * m + r,其中 0 ≤ r < m,q 为非负整数。因为不大于 c×q 的「神奇数字」个数为 q * m ,所以我们只需要从 c×q 往后搜第 r 个「神奇数字」即可。又因为对于 c×q 的之后的「神奇数字」只能是 c × q + a, c × q + 2 × a, ⋯ 和 c × q + b, c × q + 2 × b, ⋯ ,那么我们从小到大来搜索到第 r 个「神奇数字」即可。

代码:

class Solution {
public:const int MOD = 1e9 + 7;int nthMagicalNumber(int n, int a, int b) {int c = lcm(a, b);int m = c / a + c / b - 1;int r = n % m;int res = (long long) c * (n / m) % MOD;if (r == 0) {return res;}int addA = a, addB = b;for (int i = 0; i <  r - 1; ++i) {if (addA < addB) {addA += a;} else {addB += b;}}return (res + min(addA, addB) % MOD) % MOD;}
};

3

复杂度分析
时间复杂度: O(a+b),其中 n,b,c 为题目给定的数字。
空间复杂度: O(1),仅使用常量空间开销。
author:LeetCode-Solution

相关内容

热门资讯

春分的寄语 关于春分的寄语(6篇)  在日常学习、工作和生活中,大家都有写寄语的经历,对寄语很是熟悉吧,寄语的文...
佛系女孩座右铭 佛系女孩座右铭  一、做人要能随遇而安随缘生活随心自在随喜而做;处事要从澹处着眼疑处用心无处下手拙处...
微信最时髦的网名 微信最时髦的网名  微信最时髦的网名(精选324个)  网名指在网上使用的名字。由于网络是一个虚拟的...
伤感网名男生 伤感网名男生  伤感网名男生(精选400个)  网名指在网上使用的名字。由于网络是一个虚拟的世界,为...
微信头像的个性签名 2018微信头像的个性签名  导语:关于2018微信头像的个性签名,学会忘记是生活的技术,学会微笑是...
晚安心语图片加文字图片 晚安心语图片加文字图片  今夜星光灿烂,好运随时来,晚安心语图片加文字图片。下面是应届毕业生小编为大...
繁体字伤感个性签名 繁体字伤感个性签名精选大全  1、只想与你共度壹生,你却无心与我携手白头。  2、无法对你完全不管,...
夸人漂亮的语句 夸人漂亮的语句夸人漂亮的语句 浓桃艳李沉鱼落雁。闭月羞花。春花秋月,是诗人们歌颂的情景,可是我对于它...
留言板留言大全爱情   留言板留言大全爱情  1、一份旧报纸,时间的追溯,那年那月那个时间里,我的爱情开始于那个年代,阅...
高中老师给学生的评语 高中老师给学生的评语200字  我们的教师对学生的评语是我们教师每一个学期的工作之一,这个评语对我们...
学生手册评语 学生手册评语(汇编15篇)  在日常学习、工作和生活中,大家最不陌生的就是评语了吧,评语可有效引导被...
毕业纪念册寄语 毕业纪念册寄语(集锦15篇)  无论是身处学校还是步入社会,要用到寄语的情况还是蛮多的,寄语是指寄托...
小学生书信作文评语整理   作文开头:  1、文章开头简而得当,通过环境描写来衬托人物心情,十分艺术化。  2、开头简明扼要...
尼采最经典语录 尼采最经典语录  1、即使你对他们温柔敦厚,但他们仍旧是觉得受到你的蔑视。他们以隐秘的伤害行为报答你...
玖兰枢语录集 玖兰枢语录集  1.我会承担责任的,因为我也是为了这一刻用尽手段,优姬,走吧,我们已经不能留在这里了...
宝宝生日寄语 宝宝生日寄语  宝宝生日寄语(一)  时光飞速,眨眼我的宝贝已经满四周岁了!面对人生的第一个里程,妈...
暖心晚安寄语 关于暖心晚安寄语大全(精选60句)  有些人,今天和明天的人生观会差很多。如果因为一时情绪掉进谷底就...
老师给学生的毕业赠言 老师给学生的毕业赠言(精选120句)  我挽不住要走的风,也无法拥抱一整片天空,愿此去前程似锦,再相...
中班下学期幼儿评语 中班下学期幼儿评语(精选260句)  在日常学习、工作和生活中,大家都有写评语的经历,对评语很是熟悉...
中班幼儿园学生评语示例   小雨,在"元旦"歌咏比赛中,你扮演"小乌鸦"时那稚气而不失优美的舞姿,令人至今难忘,那甜甜的微笑...