3.华为OD北京研究所二面手撕代码实录:求1-n的最小正整数

博客详细记录了华为OD北京研究所面试中的一道算法题,要求找到1到n的最小正整数,即这些数的最小公倍数。由于数值范围大,需对结果取模987654321。文章通过四种编程语言(Java、C、C++、Python)展示了如何解决这个问题,主要思路是分解质因数并找出最大次幂,避免了溢出问题。
摘要由CSDN通过智能技术生成

求1-n的最小正整数

输入一个n (1 <= n <= 10000)
求能整除1-n的最小正整数,即最小公倍数
由于数可能比较大,输出结果mod987654321
eg.
输入:3
输出:6 (6是能整除1,2,3的最小正整数)

思路

我们知道两个数a,b的最小公倍数是,但是由于这里求1到n的最小公倍数,采用这个方法的话,a*b将超出int的表示范围,导致溢出。

因此,我们考虑类似短除的做法,对1-n的每一个数进行分解质因数的方法求解。找出每个质数的最大次幂,相乘即可得最小公倍数。

首先通过筛法找出1到n的所有质数,然后对每一个小于等于n的数,分解其质因数并找出最大的幂。最后,将每个质数的最大幂相乘,得到的结果就是n以内所有数的最小公倍数。

java解法
import java
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Clap of thunder

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

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

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

打赏作者

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

抵扣说明:

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

余额充值