Leetcode 2431.最小偶倍数

news2024/11/26 3:21:28

 

给你一个正整数 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 % b
    return 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.coloradmin.cn/o/969713.html

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

相关文章

docker 笔记10:Docker轻量级可视化工具Portainer

1. 是什么 Portainer 是一款轻量级的应用&#xff0c;它提供了图形化界面&#xff0c;用于方便地管理Docker环境&#xff0c;包括单机环境和集群环境。 2.安装 https://docs.portainer.io/v/ce-2.9/start/install/server/docker/linux 步骤 docker命令安装 docker run -d …

【postgresql 基础入门】数据库服务的管理

数据库服务管理 ​专栏内容&#xff1a; postgresql内核源码分析手写数据库toadb并发编程 ​开源贡献&#xff1a; toadb开源库 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff…

第一章:绪论

1.1 系统架构概述 架构是体现在组件中的一个系统的基本组织、它们彼此的关系与环境的关系以及指导它的设计和发展的原则。 系统是组织起来完成某一特定功能火一组功能的组件集。系统这个术语包括了单独的应用程序、传统意义上的系统、子系统、系统之系统、产品线、整个企业及…

三层交换实验:实现不同VLAN间的互通与路由配置

文章目录 一、实验背景与目的二、实验拓扑三、实验需求四、实验解法1. PC 配置 IP 地址2. PC2 属于 Vlan10&#xff0c;PC3 属于 Vlan20&#xff0c;在三层交换机上配置 Vlanif 三层接口实现 Vlan10 和 Vlan20 三层互通3. 测试在 PC3 上 Ping PC4 &#xff0c;可以 Ping 通 PC4…

吴恩达《面向开发者的提示词工程》

Ref&#xff1a; 【中英字幕 | P01 Introduction】2023吴恩达新课《面向开发者的提示词工程》_哔哩哔哩_bilibili 对应的笔记 ChatGPT Prompt - 知乎 本课程主要介绍指令微调LLM的最佳实践 在大型语言模型或LLM的开发中&#xff0c;大体上有两种类型的LLM&#xff0c;我将其…

kotlin协程广播管道BroadcastChannel,订阅管道openSubscription

kotlin协程广播管道BroadcastChannel&#xff0c;订阅管道openSubscription import kotlinx.coroutines.* import kotlinx.coroutines.channels.*fun main(args: Array<String>) {//广播消息//也可以把普通Channel转换成广播Channel//val channel Channel<Int>()/…

企业场景篇

企业场景篇 设计模式 简单工厂模式 工厂&#xff08;factory&#xff09;处理创建对象的细节&#xff0c;一旦有了SimpleCoffeeFactory&#xff0c;CoffeeStore类中的orderCoffee()就变成此对象的客户&#xff0c;后期如果需要Coffee对象直接从工厂中获取即可。这样也就解除了…

【javaweb】学习日记Day9 - Mybatis 基础操作

目录 一、删除 &#xff08;1&#xff09;在mapper接口执行sql删除语句 ① 注解后sql语句没有提示怎么办&#xff1f; &#xff08;2&#xff09;测试层 &#xff08;3&#xff09;开启mybatis日志 &#xff08;4&#xff09;预编译SQL 二、新增 &#xff08;1&#…

深入探讨Java虚拟机(JVM):执行流程、内存管理和垃圾回收机制

目录 什么是JVM&#xff1f; JVM 执行流程 JVM 运行时数据区 堆&#xff08;线程共享&#xff09; Java虚拟机栈&#xff08;线程私有&#xff09; 什么是线程私有? 程序计数器&#xff08;线程私有&#xff09; 方法区&#xff08;线程共享&#xff09; JDK 1.8 元空…

Linux下 Socket服务器和客户端文件互传

目录 1.项目描述 2.函数准备 2.1 gets函数 2.2 popen函数、fread函数 2.3 access 函数 2.4 exit 函数 2.5 strtok 函数 2.6 chdir函数 3.项目代码 3.1服务器代码 3.2客户端代码 4.问题总结 1.项目描述 基于Soket聊天服务器&#xff0c;实现服务器和客户端的文件传输。…

机器学习——线性回归/岭回归/Lasso回归

0、前言&#xff1a; 线性回归会用到python第三方库&#xff1a;sklearn.linear_model中的LinearRegression导入第三方库的方法&#xff1a;from sklearn.linear_model import LinearRegression使用LinearRegression(二维数据&#xff0c;一维数据)进行预测&#xff0c;其中数…

YOLOv5,v8中文标签显示问题

本人使用的是YOLOv5-7.0&#xff0c;YOLOv8的最新版本 1. 训练YOLOv5时matplotlib无法显示中文标签 数据集中的标签是中文&#xff0c;在训练YOLOv5&#xff0c;v8算法时&#xff0c;matplotlib库无法显示中文 2 解决方法 在yolov5/utils/plots.py文件中手动添加黑体字体&a…

flutter Could not get unknown property ‘ndkVersion’

使用的 flutter 版本为 3.7.2 &#xff0c;编译运行 如下 Could not get unknown property ‘ndkVersion’ for object of type com.android.build.gradle.internal.dsl.BaseAppModuleExtension 解决方法是 在flutter-3.7.2\packages\flutter_tools\gradle\flutter.gradle配置…

Java特性之设计模式【抽象工厂模式】

一、抽象工厂模式 概述 抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式 在抽象工厂模式中&#xff0c;接口是…

2001-2021年上市公司数字化转型(年报词频统计)

2001-2021年上市公司数字化转型&#xff08;年报词频统计&#xff09; 1、时间&#xff1a;2001-2021年 2、来源&#xff1a;上市公司年报、巨潮资讯网 3、方法说明&#xff1a;参考管理世界中吴非&#xff08;2021&#xff09;的做法&#xff0c;对人工智能技术、大数据技术…

警告:Provides transitive vulnerable dependency maven:org.yaml:snakeyaml:1.30

1. 警告 SpringBoot 的 validation 依赖包含有易受攻击的依赖 snakeyaml。 警告信息如下&#xff1a; Provides transitive vulnerable dependency maven:org.yaml:snakeyaml:1.30 意思是&#xff1a;提供了可传递的易受攻击依赖 maven:org.yaml:snakeyaml:1.30 2. 警告示例 …

networkX-03-连通度、全局网络效率、局部网络效率、聚类系数计算

文章目录 1.连通度1.1 检查图是否连通1.2 检查有向图是否为强连通1.3 点连通度、边连通度&#xff1a; 2.网络效率2.1全局效率2.2 局部效率2.2.1 查找子图2.2.3 局部效率源码分析 3.聚类系数&#xff08;Clustering Coefficient&#xff09;3.1 聚类系统源码分析 教程仓库地址&…

【开学作业考试层出不穷】Python自动答题脚本,在线答题,零基础可学!!(附源码)

前言 大家好 我是小曼呐~ 9月份想必大部分同学已经开学啦&#xff0c;开学少不了老师会布置一些 软件上面的作业 今天教大家用python制作自动答题脚本&#xff0c;100%准确率哦~ 喜欢的同学记得关注 收藏哦~ 环境使用 Python 3.8Pycharm 模块使用 import requests —>…

MySQL表的内连和外连

文章目录 MySQL表的内连和外连1. 内连接(1) 显示SMITH的名字和部门名称 2. 外连接2.1 左外连接(1) 查询所有学生的成绩&#xff0c;如果这个学生没有成绩&#xff0c;也要将学生的个人信息显示出来 2.2 右外连接(1) 对stu表和exam表联合查询&#xff0c;把所有的成绩都显示出来…

【Apollo学习笔记】——规划模块TASK之SPEED_BOUNDS_PRIORI_DECIDERSPEED_BOUNDS_FINAL_DECIDER

文章目录 前言SPEED_BOUNDS_PRIORI_DECIDER功能简介SPEED_BOUNDS_FINAL_DECIDER功能简介SPEED_BOUNDS_PRIORI_DECIDER相关配置SPEED_BOUNDS_FINAL_DECIDER相关配置SPEED_BOUNDS_DECIDER流程将障碍物映射到ST图中ComputeSTBoundary(PathDecision* path_decision)ComputeSTBounda…