Leetcode 2431.最小偶倍数

 

给你一个正整数 n ,返回 2  n 的最小公倍数(正整数)。

示例 1:

输入:n = 5
输出:10
解释:5 和 2 的最小公倍数是 10 。

示例 2:

输入:n = 6
输出:6
解释:6 和 2 的最小公倍数是 6 。注意数字会是它自身的倍数。

提示:

  • 1 <= n <= 150

我的答案:

 

一、信息

1.给我一个正整数n

2.返回2和n的最小公倍数

二、分析

1.条件1和条件2已经很明显的告诉我此次的目的在于求解n的最小公倍数。

三、步骤

第一步输入一个正整数

第二步求解n的最小公倍数

第三步输出

四、问题出现了

1.该如何求解一个正整数的最小公倍数?

求解两个正整数的最小公倍数(LCM,Least Common Multiple)通常需要先求出这两数的最大公约数(GCD,Greatest Common Divisor)。求解 GCD 有很多方法,其中较为普遍的是使用欧几里得算法。

首先,提供两个正整数的 GCD 的求解方法:

**欧几里得算法**:

假设有两个非负整数 \(a\) 和 \(b\) 且 \(a ≥ b\),如果 \(b = 0\),则 \(a\) 是两数的最大公约数。否则,\(a\) 和 \(b\) 的最大公约数是 \(b\) 和 \(a\%b\) 的最大公约数。

使用 Python,这个算法可以这样表示:

def gcd(a, b):while b:a, b = b, a % breturn a

当我们有了 GCD 后,可以使用以下关系求 LCM:

{LCM}(a, b) = {|a \times b|}{\text{GCD}(a, b)}

这里是因为两数之积等于它们的最大公约数和最小公倍数的积。

再次使用 Python,这个关系可以这样表示:

def lcm(a, b):return abs(a*b) // gcd(a, b)

如果你需要求三个或更多数字的 LCM,可以这样做:

1. 先求前两个数字的 LCM。
2. 使用得到的 LCM 和下一个数字再求 LCM。
3. 重复上述过程,直到处理完所有数字。

例如,要求三个数字的 LCM,可以这样:

\[ \text{LCM}(a, b, c) = \text{LCM}(\text{LCM}(a, b), c) \]

这种方法可以扩展到任意数量的数字。

五、算法实现

我的答案:

思考过程:

对于算法和数学问题,一个明确、系统化的思考过程是非常重要的。以下是面对此类问题时常用的思考步骤,以刚刚的问题为例:

### 1. **理解问题**:
首先,确保我完全理解了问题及其要求。
- 这个问题要我做什么?
  *找出2和一个给定的正整数n的最小公倍数(LCM)。*

### 2. **列出已知条件**:
明确已知的信息和限制。
- n是一个正整数。
- 1 <= n <= 150

### 3. **考虑简单案例和特殊情况**:
这有助于发现问题的模式。
- 当n=1时,LCM是什么?
- 当n是奇数时,它和2的GCD是多少?
- 当n是偶数时,情况会如何变化?

### 4. **引入已知概念和公式**:
如果与您熟悉的概念或技巧相关,请引入它们。
- 了解到两数的LCM可以由它们的GCD推出。
- 使用欧几里得算法来找GCD。

### 5. **逻辑推理**:
在已知信息的基础上进行推理。
- 2是素数,只与偶数有GCD大于1。
- 因此,对于奇数n,GCD(2, n) = 1,而对于偶数n,GCD(2, n) = 2。

### 6. **形成算法或解决方案**:
基于上述分析,将解决方案明确并转化为算法。
- 如果n是偶数,返回n。
- 如果n是奇数,返回2*n。

### 7. **测试算法**:
使用一些示例输入来验证我的答案。
- 当n=5(奇数)时,输出应为10。
- 当n=6(偶数)时,输出应为6。

### 8. **优化** (如果可能和必要的话):
重新审视我的解决方案,考虑是否有更高效、简洁的方法。
- 在这个特定问题中,我们发现了一个简化的方法,不需要真正计算GCD。

### 9. **总结**:
回顾整个问题和解决方案,总结学到的内容和遇到的难点。

这样的思考过程不仅可以帮助解决当前的问题,还可以培养面对未来问题时的解决思路和方法。

**分析**:
1. **问题描述**: 题目要求我们找到2和任意给定的正整数`n`的最小公倍数。
2. **已知条件**: `1 <= n <= 150`,这是一个有界的问题,所以我们可以保证我们的算法在合理的时间内完成。

**推理**:
1. **GCD与LCM的关系**: 我们知道两个数字的乘积是它们的最大公约数(GCD)和最小公倍数(LCM)的乘积。数学上,这可以表示为:\[ a \times b = \text{GCD}(a, b) \times \text{LCM}(a, b) \]。由此我们可以得到:\[ \text{LCM}(a, b) = \frac{a \times b}{\text{GCD}(a, b)} \]。
2. **求GCD**: 对于两个数字,存在多种方法求GCD,但其中最经典的方法是欧几里得算法(也称为辗转相除法)。
3. **求2和n的GCD**: 因为2是一个素数,它只与偶数共有GCD大于1(即GCD为2),与奇数的GCD为1。

**演绎**:
1. 如果`n`是偶数,则\[ \text{GCD}(2, n) = 2 \],所以\[ \text{LCM}(2, n) = n \]。
2. 如果`n`是奇数,则\[ \text{GCD}(2, n) = 1 \],所以\[ \text{LCM}(2, n) = 2 \times n \]。

根据上述推理,我们可以得到一个简单的算法:
- 如果`n`是偶数,则LCM是`n`。
- 如果`n`是奇数,则LCM是`2 * n`。

这种分析、推理和演绎的过程对于解决问题至关重要。它不仅帮助我们理解问题的核心,还为我们提供了一个有效的求解方法。

英雄师傅答案:

暴力破解法:
C++:

int smallestEvenMultiple(int n){for(int i=1;;++i){if(i%2==0&&i%n==0){return i;}}return -1;
}

Leetcode官方题解:

方法一:数学
思路与算法

对于任意两个正整数 nnn,mmm 的最小公倍数为 n×mgcd⁡(n,m)\frac{n \times m}{\gcd(n, m)} 
gcd(n,m)
n×m

 ,其中 gcd⁡(n,m)\gcd(n, m)gcd(n,m) 为 nnn 和 mmm 的最大公约数。

现在题目给出一个正数 nnn,需要返回 222 和 nnn 的最小公倍数,又因为任意正偶数与 222 的最大公约数为 222,任意正奇数与 222 的最大公约数为 111。所以当 nnn 为偶数时直接返回 nnn,否则返回 2×n2 \times n2×n 即可。

作者:力扣官方题解
C:

int smallestEvenMultiple(int n) {return n % 2 == 0 ? n : 2 * n;
}


C++:

class Solution {
public:int smallestEvenMultiple(int n) {return n % 2 == 0 ? n : 2 * n;}
};

JAVA:
 

class Solution {public int smallestEvenMultiple(int n) {return n % 2 == 0 ? n : 2 * n;}
}

 总结:

题目“最小偶倍数”主要是要我们找出给定正整数 \( n \) 和数字 2 之间的最小公倍数。以下是从这个问题中我们可以学到的内容和可能犯的错误:

### **学习内容**:

1. **数学知识的应用**:
   - 这个问题需要我们知道如何求两个数的最小公倍数。这引导我们回想和应用基础数学知识。

2. **编程技巧**:
   - 简化问题。我们知道2是偶数,所以只有当 \( n \) 是奇数时,它和2的最小公倍数是 \( 2 \times n \)。当 \( n \) 是偶数时,它本身就是最小公倍数。

3. **代码优化**:
   - 由于问题特点,我们不需要使用复杂算法来计算最小公倍数。根据 \( n \) 的奇偶性,我们可以迅速确定答案。

### **常见错误**:

1. **过度复杂化**:
   - 有些人可能会使用标准算法来计算最小公倍数,例如先找出两个数字的最大公约数,然后再根据此求最小公倍数。而在这特定问题中,这是不必要的。

2. **不考虑边界条件**:
   - 如果忽视了当 \( n \) 是1或2的情况,可能会导致不正确的输出。

3. **逻辑错误**:
   - 可能错误地假设当 \( n \) 是奇数时,其和2的最小公倍数是 \( n \),而当 \( n \) 是偶数时是 \( 2 \times n \),这与实际情况恰恰相反。

总的来说,这个题目提醒我们在解决问题时要注意问题的特点和简化,而不是机械地应用公式或算法。同时,它也强调了在编写代码时要考虑到所有可能的边界条件

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Allegro引流方式有哪些?Allegro平台注意事项

正确的引流&#xff0c;你的平台才会让更多人发现&#xff0c;才能提高转化率&#xff0c;那么Allegro引流方式有哪些&#xff0c;Allegro平台注意事项是什么呢&#xff1f; Allegro引流方式有哪些 商品优化&#xff1a;在Allegro上&#xff0c;关键是确保您的商品能够在搜索…

[SpringBoot3]博客管理系统(源码放评论区了)

八、博客管理系统 创建新的SpringBoot项目&#xff0c;综合运用以上知识点&#xff0c;做一个文章管理的后台应用。依赖&#xff1a; Spring WebLombokThymeleafMyBatis FrameworkMySQL DriverBean Validationhutool 需求&#xff1a;文章管理工作&#xff0c;发布新文章&…

基于googlenet网络的动物种类识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ................................................................. % 获取输入层的尺寸 Inp…

【Golang】函数篇

1、golang函数基本定义与使用 func 函数名 (形参列表) (返回值类型列表) {函数体return 返回值列表 }其中func用于表明这是一个函数&#xff0c;剩下的东西与其他语言的函数基本一致&#xff0c;在定义与使用的时候注意函数名、参数、返回值书写的位置即可。下面使用一个例子…

java开发之个人微信的二次开发

简要描述&#xff1a; 获取收藏详细信息 请求URL&#xff1a; http://域名地址/weChatFavorites/getFavItem 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a;…

算法通关村——滑动窗口高频问题

1. 无重复字符的最长子串 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 1.1 滑动窗口 找到最长字串需要找到字串的首尾位置…

win10系统配置vmware网络NAT模式

1&#xff0c;查看win10 IP地址&#xff1a;ipconfig 2, vmware设置&#xff1a;编辑>>虚拟网络编辑器>>点击添加网络&#xff08;选择NAT模式&#xff09; 3&#xff0c;虚拟机网络设置&#xff1a;点击VMware虚拟机>>设置>>网络适配器 4&#xff…

一加11/Ace2/10Pro手机如何实现全局120HZ高刷-游戏超级流畅效果

已经成功root啦。安卓13目前也一样支持LSPosed框架&#xff0c;如果你对LSP框架有需求&#xff0c;也可以使 自测120HZ刷新率诞生以后&#xff0c;很多小伙伴用上了就很难回来啦&#xff0c;一加11/Ace2/10Pro/9pro手 机厂商也对新机做了很多的适配&#xff0c;让我们日常使用起…

智能机器人:打造自动化未来的关键技术

文章目录 1. 智能机器人的基本概念2. 智能机器人的关键技术2.1 机器视觉2.2 机器学习与深度学习2.3 传感器技术 3. 智能机器人的应用领域3.1 制造业3.2 医疗保健3.3 农业3.4 服务业 4. 智能机器人的未来趋势4.1 自主决策能力的提升4.2 协作与互操作性4.3 个性化定制4.4 环境感知…

学习心得07:C#

之前也没有看过C#的书&#xff0c;C#的程序倒是搞了一些。好在项目不大&#xff0c;我又会套路。 C#很象是JAVA。好像就是JAVA出来之后&#xff0c;微软抄的。好东西就要学习&#xff0c;这不丢脸。 我倒是想&#xff0c;有没有办法把JAVA和C#进行映射&#xff0c;然后直接编译…

Vue2进阶篇学习笔记

文章目录 Vue2进阶学习笔记前言1、Vue脚手架学习1.1 Vue脚手架概述1.2 Vue脚手架安装1.3 常用属性1.4 插件 2、组件基本概述3、非单文件组件3.1 非单文件组件的基本使用3.2 组件的嵌套 4、单文件组件4.1 快速体验4.2 Todo案例 5、浏览器本地存储6、组件的自定义事件6.1 使用自定…

6.Xaml CheckBox控件

1.运行图片 2.运行源码 a.xaml 源码 <Grid Name="Grid1"><!--IsThreeState="True" 这个为true的时候,有三个状态 第三个状态为什么也没有--><CheckBox Name=