【878. 第 N 个神奇数字】

news2025/2/23 23:32:48

来源:力扣(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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28771.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

亚马逊气候友好型承诺所有认证

【亚马逊气候友好型承诺所有认证】 亚马逊与广泛的外部认证合作&#xff0c;包括政府机构、非营利组织和独立实验室&#xff0c;以帮助我们区分更具可持续性的产品。亚马逊专注于信誉良好、透明且专注于保护自然世界的认证。我们将定期评估和重新评估认证环境&#xff0c;以确保…

若依框架的暴力破解漏洞

文章目录 漏洞描述漏洞复现修复建议漏洞描述 由于图片验证码未做好前后台的统一校验,可重复利用验证码,以及无登录错误次数限制等,导致攻击者可对账号与密码进行的穷举测试,从而获取网站登录访问权限 漏洞复现 第一步 抓包获取登录数据包,默认口令Admin123 第二步 发…

win10系统下使用openvino部署yolov5模型

文章目录前言一、环境1、硬件2、软件二、YOLO模型三、新建Qt项目1、pro文件2、main.cpp四、效果五、后记前言 上一篇介绍过使用onnxruntime实现模型推理部署&#xff0c;但在我的机器上视频效果仍不理想&#xff0c;本篇介绍使用openvino完成模型推理部署。   openvino是Inte…

Windows OpenGL ES 图像透明度

目录 一.OpenGL ES 图像透明度 1.原始图片2.效果演示 二.OpenGL ES 图像透明度源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 Open…

linux下gcc编程11-window下clion编译调试nginx+集成lua-nginx-module+安装开源x-waf

nginx模块 nginx作为项目的7层代理入口&#xff0c;对于http请求的过滤&#xff0c;如sql注入&#xff0c;xss攻击等过滤功能较弱&#xff0c;研究了下开源的一些waf&#xff0c;完全开源的https://github.com/xsec-lab/x-waf&#xff0c;利用lua来过滤请求&#xff0c;同时拥…

TuckER 论文笔记

Modeling Relation Paths for Representation Learning of Knowledge Bases- Introduction- Background- Algorithm- Experiment- Conclusion- CodeIvana Balazevic, Carl Allen, Timothy M.Hospedales - Introduction TuckERuckER是一个相对简单但功能强大的线性模型&#xf…

网络营销中 SEO 的作用

与其有时间去阅读各种SEO知识&#xff0c;不如多做一些实际的测试和练习。在百度官方发布的网页质量白皮书中&#xff0c;其实重点介绍了网页速度对SEO优化的影响&#xff0c;前面也出现了一种叫做闪电算法的算法&#xff0c;对于移动排名1.5秒内加载首屏即可打开的网页&#x…

2022亚马逊云科技re:Invent科创风尚,抢占下一个万亿赛道

新风向&#xff1a;重塑科技创投格局 面向未来增长&#xff0c;聚焦投资风向&#xff0c;演绎全新技术。11月28日至12月2日&#xff0c;2022亚马逊云科技re:Invent即将重磅来袭&#xff0c;在美国拉斯维加斯再度盛启。改变世界的全新云技术、不同领域的优选实践&#xff0c;都…

【仿真建模】第一课:AnyLogic入门基础教程 - 行人库入门讲解

文章目录一、AnyLogic介绍二、设置2.1 设置中文三、新建项目四、行人库介绍五、创建新行人六、切换3D视角七、增加墙八、行人密度图一、AnyLogic介绍 二、设置 2.1 设置中文 三、新建项目 四、行人库介绍 点击面板&#xff0c;选择第三个图标&#xff0c;就是行人库 行人库分…

react--编程式导航、antd的使用

编程式 1. 借助路由对象中的history 获取&#xff1a; this.props.history.push(/xx/xx) | this.props.history.replace(/xx/xx) 2. 传递sreach参数 this.props.history.push(/xx/xx?xxx100&xx111) 3. 传state参数 this.props.history.push(/xx,{id:1,title:…

web前端期末大作业 HTML+CSS+JavaScript仿唯品会购物商城网页设计实例 企业网站制作

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

ISO 5659-2塑料 烟生成 第2 部分:单室法测定烟密度试验方法

本标准适用于测定塑料燃烧时所产生烟雾的比光密度&#xff0c;并以最大比光密度为试验结果。它用于评定在规定条件下塑料的发烟性能。 ISO5659-2 建筑材料阻燃防火测试-标准名称&#xff1a; ISO 5659-2: 塑料&#xff0d;生烟性测定&#xff0d;第2部分&#xff1a;单烟箱光…

echarts看板效果图:流光折线图、3d柱状图、3d饼图

前言 现在展厅的大看板是越花里胡哨越好,不过真的挺难做的。好在可以百度找到一些大神的作品进行参考。 下面的内容都是基于echarts 5.3.3 和 vue3 。另外demo都是参考别人的案例。 流光折线图 效果图 代码 <template><div id="demo"></div&g…

从零开始学JAVA(01):配置Java运行环境、实现HelloWorld

一、下载安装JDK 1、下载安装 Oracle | Cloud Applications and Cloud Platform 2、验证&#xff08;控制太输入java、java-version、javac&#xff09; 二、 实现HelloWorld 1、下载 Sublime Text Sublime Text - Text Editing, Done Right 2、编写HelloWorld.java文件 …

数据恢复方法有哪些?如何恢复误删照片

数据恢复方法有哪些&#xff1f;电脑文件数据的误删除&#xff0c;基本每个人都遇到过。当我们还是一个电脑小白的时候&#xff0c;说实话这是非常让人崩溃的事情&#xff0c;不过不用担心&#xff0c;今天小编就以自己的亲身经历告诉大家几种比较好用的数据恢复方法。 删除的文…

PyTorch深度学习基础之Tensor对象及其应用的讲解及实战(附源码 简单易懂 包括分段 映射 矩阵乘法 随机数等等)

觉得有帮助请点赞关注收藏 有问题可评论区留言~~~ Tensor对象是一个维度任意的矩阵&#xff0c;但是一个Tensor中所有元素的数据类型必须一致。torch包含的数据类型和普遍编程语言的数据类型类似&#xff0c;包含浮点型&#xff0c;有符号整型和无符号整形&#xff0c;这些类型…

typora免费安装版教程,支持Windows、Mac、Linux

大家好&#xff0c;我是可乐&#xff0c;本篇文章为大家介绍 Typora快捷键、Typora免费安装教程。 Typora是一款简单易用的Markdown编辑器。 目前 Typora 官方是不提供免费版下载了&#xff0c;需要一次性购买版权&#xff0c;支持正版的可以直接前往官网购买&#xff0c;89 …

深圳CPDA认证|学数据分析,其实就是寻找数据背后的规律

现如今&#xff0c;我们正处在一个互联网发展的时代&#xff0c;大大小小的企业对于数据分析相关岗位的需求正开始逐渐增加&#xff0c;因为所有的企业都有数据&#xff0c;企业需要让数据分析师通过整理、分析企业数据总结出企业目前的发展现状&#xff0c;并且也要为企业做出…

【c++】虚函数,纯虚函数,抽象类

这里写目录标题虚函数纯虚函数抽象类为什么抽象类不能创建对象&#xff1f;注意点&#xff1a;接口类如何设计虚析构总结&#xff1a;构造函数为什么不能是虚函数有虚函数的对象创建过程虚函数 虚函数&#xff1a;给成员函数前面加上virtual关键字。 1.派生类中定义虚函数必须…

RS485电工详解

串口数据帧我们学过&#xff0c;但到RS485是不是就卡壳了&#xff1f; 空闲状态&#xff1a;AB线悬浮在2.3V的样子。GND是0V&#xff0c;5V是4.75v 工作时&#xff0c;AB线在2.3v上做逻辑01&#xff08;-2v&#xff0c;2v&#xff09;跳变。 这图是不是还不太好理解&#xff1…