leetcode 878. Nth Magical Number (第N个魔法数)

魔法数(大贤者福尔) 大贤者福尔最近迷上了数学,他研究发现有些神奇的数似乎具有某种魔力。于是他开始研究自然数,发现某个范围内的一些数,经过一定规则运算后的和,等于另一个数按同样规则计算后的值。具体来说,给定不大于N的整数a,b,c,d(1≤a≤b≤c≤d≤N),可能存在关系a^x+b^x+c^x=d^x。 福尔想知道在给定的范围N中,有多少数能够满足这种关系? 输入 输入数据有若干行,每行包括两个整数x, N(2≤x≤3,1≤N≤100)。 输出 对每组测试数据,先输出样例编号Case c:,c为当前测试样例的组号,从 阅读详情

在这里插入图片描述
给出整数a, b,找到第n个魔法数。魔法数是指能被a 或 b整除。
结果对109+7取模

思路:
比如2和3,n=4,即要找第4个魔法数
魔法数能被2或3整除,先找到2和3的倍数
2 4 6 8 10 12
3 6 9 12 15
排下序:2 3 4 6 6 8 9 10 12 12 15

可以发现,每个公倍数会出现2次,以公倍数为分界点,每两个不同的公倍数之间的数字个数是一样的
把不同的公倍数之间的数字称为一个block,那么block的长度len=lcm/2 + lcm/3 - 1 ,
其中lcm是指最小公倍数,1是重复的一个公倍数,要减掉

我们要找第n个魔法数,可用n/len定位到第几个block,再用n % len定位到所在block的第几个数字
比如n=4,a=2,b=3
算出lcm = 6
block的长度len = lcm/2 + lcm/3 - 1 = 4
n/len=1, 所以我们定位在第1个block,n%len = 0, 所以第n个数在第一个block的最后一个数,也就是6

那如果n%len!=0呢?
假设shift = n%len, 即偏移量
注意这个是偏移量,即下一个block的第几个数字,而我们要找的是具体数字是多少,即要找比定位到的block的最后一个数字大了多少,大的这部分的增加量。
因此需要找偏移量和增加量的关系。

还是假设a=2,b=3
如果是2的倍数,走一步的偏移量是2, 同理3的倍数走一步的偏移量是3
一步偏移量对应的分别就是1/2,1/3
小学有道题,甲做完一个工作2小时,乙做完一个工作3小时,同时做会是几小时,那么他们一起做的工作效率是1/2+1/3
这里也是,一起移动每个偏移量对应1/2 + 1/3
那么一个偏移量对应的实际的数字增加量就是1/(1/2+1/3),也就是下一个数字比上一个数字平均大多少。当然它不能是小数,取ceil

刚刚用1/(1/2+1/3)是根据a和b一起走,根据平均效率得到的应该增加的数字,实际上只有a或b移动,分别看a和b要多少步移动到这个增加的数字,取较小值,就是实际的偏移量对应的增加量

用lcm x block数 + 增加量 即得到最后的魔法数(说的有点难理解,其实就是一个是block剩下的偏移量,一个是这个偏移量对应的增加的数,要怎么把它们对应起来的问题,对应关系如下)
偏移量 / (1/a + 1/b) = min( ceil(增加的数字/a) x a + ceil(增加的数字/b) x b)

    public int nthMagicalNumber(int n, int a, int b) {
        long lcm = a * b / gcd(a, b);
        long M = 1000000007;
        long len = lcm / a + lcm / b - 1;
        long blocks = n / len;
        long shift = n % len;
        double idx = shift / (1.0 / a + 1.0 / b);
        long reminder = Math.min((long)Math.ceil(idx/a)*a, (long)Math.ceil(idx/b) * b);
        return (int)((lcm * blocks + reminder) % M);
    }
    
    int gcd(int a, int b) {
        return (b == 0 ? a : gcd(b, a % b));
    }

还有一个二分查找法
假如第n个魔法数是num, 那么n = num/a + num/b - num/lcm
根据限制,知道left = 1, right = n × max(a,b)×109 ,设right = 1e15好了
二分查找 使mid == n即可,注意超出了整数范围,设为long型

#150. 魔法书密码 #150. 魔法书密码 统计 描述 提交 自定义测试 【题目描述】: 哪里有压迫,哪里就有反抗。 moreD的宠物在法庭的帮助下终于反抗了。作为一只聪明的宠物,他打算把魔法师moreD的魔法书盗去,夺取moreD的魔法能力。但moreD怎么会让自己的魔法书轻易地被盗取?moreD在魔法书上设置了一个密码锁,密码锁上有一个问题。 施以《斯卧铺》魔法吧,你有M次机会,如此将得完美密码。 然后是一串小写... 阅读详情

相关推荐

沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明

总目录在这哦~ https://blog.csdn.net/z123canghai/article/details/107700878 第六章 接收端结构及功能说明 子目录 6.1 RX的模拟前端 6.2 RX的OOB信号 6.3 RX的均衡器 6.4 RX的CDR 时钟数据恢复 6.5 RX时钟输出结构 6.6 RX 的极性控制 6.7 RX 的PRBS 6.8 Rx字节、字的对齐功能 6.9 Rx接收弹性缓冲区 6.10 Rx的时钟纠正 6.11 Rx接收通道绑定 6...

滄海的博客 1万+

【NOIP模拟】魔法数字

                                                魔法数字 题目描述 在数论领域中,人们研究的基础莫过于数字的整除关系。一般情况下,我们说整除总在两个数字间进行,例如 a | b(a能整除b)表示 b 除以 a 的余数为 0 。 我们称一个数字 X 是魔法的,当且仅当 X 是整数,且它能被 K 及 K 以上种一位数整除,要求这若干种一位数均在 X...

ETO的博客 710

IAR许可证Generation 18代际不匹配问题解析与解决

IAR Embedded Workbench 的许可证机制采用‘代际(Generation)’模型,而非简单版本号匹配——这是一种基于数字签名算法、加密协议和硬件绑定策略演进的授权安全体系。Generation 18 是 v9.30 及以上版本强制要求的许可代际标准,对应 ECDSA 签名与增强型硬件指纹校验,旨在提升防破解能力与平台适配性。当旧版许可证(如 Generation 16/17)被用于新 IDE 时,启动器会在本地完成代际校验并直接拦截,导致‘The generation feature is

weixin_34203832的博客 337

2023-05-29:给你一个由 n 个正整数组成的数组 nums 你可以对数组的任意元素执行任意次数的两类操作 如果元素是 偶数 ,除以 2 例如,如果数组是 [1,2,3,4] 那么你可以对最后一

2023-05-29:给你一个由 n 个正整数组成的数组 nums你可以对数组的任意元素执行任意次数的两类操作如果元素是 偶数 ,除以 2例如,如果数组是 [1,2,3,4]那么你可以对最后一个元素执行此操作使其变成 [1,2,3,2]如果元素是 奇数 ,乘上 2例如,如果数组是 [1,2,3,4] ,那么你可以对第一个元素执行此操作,使其变成 [2,2,3,4]数组的 偏移量 是数组中任意两个元素之间的 最大差值。返回数组在执行某些操作之后可以拥有的 最小偏移量。

福大大架构师每日一题 2万+

企业AI Agent审计与合规:从日志留存到网络联动的完整落地指南

审计日志是企业安全与合规体系的基石,尤其在AI Agent大规模接入业务后,如何完整记录其行为链成为新的挑战。从日志留存180天到PCI DSS合规要求,审计体系需要覆盖会话、推理、工具调用、数据访问等关键环节,并结合不可篡改的存储设计,确保证据链可信。同时,借鉴上网行为管理设备对应用行为控制审计的思路,以及Kismet被动监测网络流量的方法论,将网络侧审计与应用侧日志交叉验证,能有效发现越权和异常行为。本文从日志采集、全链路追踪、基线预警到多租户隔离,系统梳理了AI Agent审计与合规落地的关键路径,帮

weixin_32234493的博客 263

从零构建Fama-French多因子模型:量化投资系统开发实战

本文详细介绍了如何从零构建Fama-French多因子模型,并将其应用于量化投资系统的开发。首先,文章概述了Fama-French多因子模型的背景、核心原理和架构,解释了其如何通过引入市场风险、规模、价值、盈利和投资等因子来解释股票收益率的变化。接着,文章详细阐述了构建该模型的具体步骤,包括因子的计算、因子暴露的确定以及模型的估计。通过数学模型和公式,文章对模型进行了理论推导,并举例说明了其应用。此外,文章还提供了项目实战的代码案例,从开发环境搭建到源代码实现,逐步指导读者完成量化投资系统的开发。最后,文章

2501_92132293的博客 1222

LeetCode //C - 878. Nth Magical Number

The problem involves finding the nth magical number, defined as a number divisible by either of two given integers a or b. The solution uses binary search to efficiently locate the nth magical number in a range defined by the least common multiple (LCM) of

Made in Code 1556

实战:批量抓取免费代理IP全流程(附自动验证+失效剔除,爬虫抗封必备)

本文分享了一套从免费代理IP中筛选可用高匿代理的实用方案。作者通过半年实践,总结出"批量抓取+精准验证+动态维护"的方法,能从2000条免费IP中筛选出30-50条可用代理,满足中小规模爬虫需求。 方案包含四个核心环节: 多源代理抓取:针对快代理、西刺代理等不同网站定制解析规则 三层验证机制:检查有效性、匿名度和响应速度 代理池自动维护:实时淘汰失效IP Scrapy整合实战:提供可直接复用的代码 文章特别指出免费代理的三大痛点:存活率低(80%10分钟内失效)、匿名性差(仅5%是高匿代

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1601

Leetcode 878. Nth Magical Number 第 N 个神奇数字(二分查找)

Leetcode 878. Nth Magical Number 第 N 个神奇数字878. Nth Magical Number 第 N 个神奇数字题目描述示例:解答代码 878. Nth Magical Number 第 N 个神奇数字 题目描述 A positive integer is magical if it is divisible by either A or B. Return ...

importsys的博客 641

创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—ISP图像处理开发案例

创龙科技研发的 TL3588-EVM 评估板具备强大视频处理能力,可满足多场景视频开发需求。为助力开发者快速上手,本文整理 7 个实用视频开发案例,涵盖从采集到显示的全流程,详细说明各案例的硬件连接、参数配置与代码解析,帮助开发者高效实现评估板视频相关功能开发与调试。

创龙,嵌入式一体化解决方案商 206

SmartFusion从FPGA到ARM(八)——CoreUARTapb的使用

文章目录1.CoreUARTapb简介2.添加CoreAPB3总线IP核3.添加CoreUARTapb4.驱动代码实现5.库函数简介6.串口printf函数实现7.串口接收轮询和中断方式 系列教程:SmartFusion从FPGA到ARM系列教程 1.CoreUARTapb简介 对于SmartFusion2来说,MSS_UART的管脚可以任意分配,但是对于SmartFusion来说,MSS_UART的管脚是固定的不能分配: 109-UART0_RX 110-UART0_TX 111-UART1_RXD 11

whik1194的博客 2441

leetcode 878. Nth Magical Number | 878. 第N个神奇的数字(数学问题)

题目 https://leetcode.com/problems/nth-magical-number/ 题解 看了答案: 草稿: class Solution { public static final long MOD = 1000_000_007; public int nthMagicalNumber(int n, int a, int b) { long L = lcm(a, b); // 最小公倍数 long M = L / a + L /

寒泉 3万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

leetcode 878. Nth Magical Number

A positive integerismagicalif it is divisible by eitherAorB. Return theN-th magical number. Since the answer may be very large,return it modulo10^9 + 7. Example 1: Input: N = 1, A = 2...

cmy203的博客 226

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

878. Nth Magical Number

虽然也不指望自己能够做出来这道题,但是解答的过程中包含的知识点不少,有些以后或许可以用得上。 1) lcm (least common multiple),也就是两个数的最小公倍数。怎么算:A*B/gcd,gcd是最大公约数(用辗转相除法) 2)对于<=x,有多少magic numbers? x/A + x/B - x/lcm A的倍数有多少个+B的倍数有多少个-最小公倍数的倍数有多少个(...

weixin_43462819的博客 175

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【Leetcode】878. Nth Magical Number

整除的数的个数就越多,所以可以二分。整除的数的个数可以用容斥原理,即为。的最小公倍数,其等于。

数学、算法爱好者的博客 318

[Swift]LeetCode878. 第 N 个神奇数字 | Nth Magical Number

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址:https://github.com/strengthen/LeetCode➤原文地址:https://www.cnblogs.com/stren...

weixin_30739595的博客 161

算法作业第四周(leetcode)——878. Nth Magical Number

感觉随机抽的题目从第二周以来越来越简单了。。。。以下为题目地址:                           https://leetcode.com/problems/nth-magical-number/description/ 在我看来,这题其实是一道数学题。它说的是,给出两个2到40000的正整数,能被这两个数中任意一个数整除的数叫做魔数。 然后给定一个数字N(小于1000...

diceroller的博客 414

LeetCode: 878. Nth Magical Number

LeetCode: 878. Nth Magical Number 题目描述 A positive integer is magical if it is divisible by either A or B. Return the N-th magical number. Since the answer may be very large, return it modulo 10^9 ...

杨领well的专栏 594

leetcode 困难题 878. Nth Magical Number 第 N 个神奇数字-耗时100

邹九的个人博客 329

LeetCode878. Nth Magical Number

最大公约数,同余定理,二分答案。

叶卡捷琳堡的博客 589

二分查找总结与最佳实践(LeetCode 975 + LeetCode 878 + LeetCode 778 )

(一) 使用场景 通常在有序的数字中,找到某个满足一定条件的数 多次问询题 需要多次遍历且数据量极大 (二)基本流程 确定边界(low, high)值 确定边界移动条件,一定只写一边移动(low=mid high=mid-1) 或者 (low=mid+1 high=mid) 循环外返回结果 (划重点) (三)简单例题 给定一个有序数组nums和一个整数target,判断target是否存...

rainMan的博客 539

LeetCode:878. Nth Magical Number - Python

问题描述: 878. 第 N 个神奇数字 如果正整数可以被 A 或 B 整除,那么它是神奇的。 返回第 N 个神奇数字。由于答案可能非常大,返回它模 10^9 + 7 的结果。 示例 1: 输入:N = 1, A = 2, B = 3 输出:2 提示: 1 &lt;= N &lt;= 10^9 2 &lt;= A &lt;= 40000 2 &lt;= B &lt;=...

Growth Diary 1249

LeetCode878. 第 N 个神奇数字(java)

文章目录题目思路代码 题目 https://leetcode-cn.com/problems/nth-magical-number/description/ 思路 这题我首先觉得这个模的数怎么这么奇怪,然后查了一下说,这个是int里最大的质数~那么肯定和题目无关了。 如果按最简单的思路就是一个个加上去试的话目测会超时,因为如果N,A,B都取最大值,那就是要加到40000*10^9!! 先从A = ...

与望 881
上一篇: leetcode 310. Minimum Height Trees(最小高度树)
下一篇: leetcode 476. Number Complement (补数)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值