LeetCode-878. 第 N 个神奇数字【数学,二分查找,找规律】

  • 题目描述:
  • 解题思路一:二分答案+容斥原理。给定一个上下界,然后依次增大下界或者减小上界,直到只剩一个答案。容斥原理是,加上两个集合,然后减去两个集合的交集。
  • 解题思路二:找规律
  • 解题思路三:0

题目描述:

一个正整数如果能被 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 <= 10^9
2 <= a, b <= 4 * 10^4
https://leetcode.cn/problems/nth-magical-number/description/

解题思路一:二分答案+容斥原理。给定一个上下界,然后依次增大下界或者减小上界,直到只剩一个答案。容斥原理是,加上两个集合,然后减去两个集合的交集。

class Solution {const long MOD =1e9+7;
public:int nthMagicalNumber(int n, int a, int b) {long lcm=std::lcm(a,b);//最小公倍数long left=0,right=(long)min(a,b)*n;//开区间(left,right),在right情况下必有n个神奇数字。while(left+1<right){//开区间不为空long mid=left+(right-left)/2;if (mid/a+mid/b-mid/lcm>=n)//减去mid/lcm是a和b重复统计的个数right=mid;//范围缩小到(left,mid)else left=mid;//范围缩小到(mid,right)}return right%MOD;}
};

时间复杂度:O(log(min(a,b)*n))
空间复杂度:O(1)
参考链接

解题思路二:找规律

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;}
};

时间复杂度:O(a+b)
空间复杂度:O(1)

参考链接

解题思路三:0


LeetCode-878. 第 N 个神奇数字【数学,二分查找,找规律】相关推荐

  1. LeetCode 878. 第 N 个神奇数字(二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 如果正整数可以被 A 或 B 整除,那么它是神奇的. 返回第 N 个神奇数字.由于答案可能非常大,返回它模 10^9 + 7 的结果. 示例 1: 输入: ...

  2. 878. 第 N 个神奇数字 数学+二分

    878. 第 N 个神奇数字 一个正整数如果能被 a 或 b 整除,那么它是神奇的. 给定三个整数 n , a , b ,返回第 n 个神奇的数字.因为答案可能很大,所以返回答案 对 109 + 7  ...

  3. 878. 第 N 个神奇数字(二分查找+数学)| 1819. 序列中不同最大公约数的数目(枚举+数学)

    878. 第 N 个神奇数字 一个正整数如果能被 a 或 b 整除,那么它是神奇的. 给定三个整数 n , a , b ,返回第 n 个神奇的数字.因为答案可能很大,所以返回答案 对 109 + 7  ...

  4. 【每日一题Day35】LC878第N个神奇数字 | 二分查找 找规律 + 数学

    第N个神奇数字[LC878] 一个正整数如果能被 a 或 b 整除,那么它是神奇的. 给定三个整数 n , a , b ,返回第 n 个神奇的数字.因为答案可能很大,所以返回答案 对 109 + 7 ...

  5. 循环数142857问题 java_神奇数字142857与周期循环规律

    神奇数字142857与周期循环规律 (2011-09-06 18:23:30) 标签: 手机博客 杂谈 世界上最神奇的数字是: 142857 看似平凡的数字,为什么说他最神奇呢? 我们把它从1乘到6看 ...

  6. LeetCode 729. 我的日程安排表 I(set 二分查找)

    文章目录 1. 题目 2. 解题 2.1 set 二分查找 2.2 差分思想 1. 题目 实现一个 MyCalendar 类来存放你的日程安排.如果要添加的时间内没有其他安排,则可以存储这个新的日程安 ...

  7. [Golang]力扣Leetcode - 852. 山脉数组的峰顶索引(二分查找)

    [Golang]力扣Leetcode - 852. 山脉数组的峰顶索引(二分查找) 题目:符合下列属性的数组 arr 称为 山脉数组 : arr.length >= 3 存在 i(0 < ...

  8. 【LeetCode】878. 第 N 个神奇数字

    题目描述 一个正整数如果能被 a 或 b 整除,那么它是神奇的. 给定三个整数 n , a , b ,返回第 n 个神奇的数字.因为答案可能很大,所以返回答案 对 109 + 7 取模 后的值. 示例 ...

  9. 力扣每日一题:878. 第 N 个神奇数字【二分法】

    一个正整数如果能被 a 或 b 整除,那么它是神奇的. 给定三个整数 n , a , b ,返回第 n 个神奇的数字.因为答案可能很大,所以返回答案 对 109 + 7 取模 后的值. 示例 1: 输 ...

  10. LeetCode 793. 阶乘函数后K个零(二分查找)

    1. 题目 f(x) 是 x! 末尾是0的数量.(回想一下 x! = 1 * 2 * 3 * ... * x,且0! = 1) 例如, f(3) = 0 ,因为3! = 6的末尾没有0:而 f(11) ...

最新文章

  1. 一个C实现的线程池(产品暂未运用)
  2. c ++查找字符串_C ++类和对象| 查找输出程序| 套装3
  3. python游戏程序中游戏对象是什么_Python游戏编程入门
  4. 千方百剂创建账套服务器文件,千方百剂数据库设置教程.docx
  5. Unity3d iOS 内购详细流程总汇
  6. 吉比特无源光纤说明书_[干货]光纤通信之缩略语英汉对照表
  7. 从几个实例来记忆Activity的生命周期
  8. android 绘制分割线,Android 布局中分割线创建的三种方式
  9. sgip1.2 php,联通SGIP1.2错误代码
  10. C语言·XDOJ练习·拼数字
  11. 第二章:真分数理论(真分数模型:概念、假设、平行测验)
  12. 软件测试行业到底有没有前景和出路?(最全面)
  13. Postman Collection Format v1 is no longer supported and can not be imported directly. You may conver
  14. 荣耀年度旗舰曝光!麒麟990+LCD屏下指纹+40w快充,或将11月发布
  15. 如何计算变量或数据类型所占内存空间的大小
  16. 【REST系列】详解REST架构风格 —— 带你阅读Web发展史上的一个重要技术文献
  17. 研究:非英语背景移民更易识别澳大利亚俚语
  18. 【SpringBoot】SpringBoot 整合 MyBatis
  19. 用JavaScript实现简单的星座查询
  20. 索尼将开发应用于机器人和自动驾驶汽车的新型传感器技术

热门文章

  1. 人的计算与机器的计算
  2. 【ENVI入门系列】10.图像裁剪
  3. 下列关于虚电路网络的叙述中,错误的是( )
  4. 在UE商城购买了并安装的插件迁移方式
  5. 记账本app的需求分析
  6. MFC限制鼠标区域、画橡皮条线、任务栏显示图标、核对标记、文档背景色(二)
  7. OpenGLES(一)基础概念
  8. hdu6304 Balala Power!
  9. P1000刷机知识+获取ROOT+HDVS_ROM快速刷机教程 by fox
  10. 搜狗做AI:围绕语言,力出一孔