Bootstrap

华为OD机试 - 求最小公倍数(Python/JS/C/C++ 牛客练习题 HJ108)

在这里插入图片描述

2025华为OD机试题库(按算法分类):2025华为OD统一考试题库清单(持续收录中)以及考点说明(Python/JS/C/C++)

专栏导读

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。

一、题目描述

正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。

数据范围:1≤a,b≤100000 。

二、输入描述

输入两个正整数A和B。

三、输出描述

输出A和B的最小公倍数。

四、测试用例

测试用例1

1、输入

4 6

2、输出

12

测试用例2

1、输入

21 6

2、输出

42

五、解题思路

  1. 从输入中读取两个正整数A和B;
  2. 初始化一个变量C为A;
  3. 调用函数gcb,传入A、B和C作为参数;
  4. 在gcb函数中,首先判断A是否能被B整除,如果可以,则A即为最小公倍数,返回A;
  5. 如果A不能被B整除,则递归调用gcb函数,传入A+C、B和C作为新的参数,继续求解;
  6. 继续递归,直到找到A能被B整除的情况,返回A作为最小公倍数;
  7. 在主函数中,输出最小公倍数;

六、Python算法源码

# 导入sys模块,用于读取标准输入数据
import sys

# 定义函数计算最大公约数,使用欧几里得算法
def gcd(a, b):
    # 如果b为0,则返回a,否则递归调用
    return a if b == 0 else gcd(b, a % b)

def main():
    # 从标准输入读取所有输入,并以空白字符分割得到列表
    a, b = map(int, sys.stdin.read().split())
    # 调用gcd函数计算a和b的最大公约数
    g = gcd(a, b)
    # 根据公式计算最小公倍数,注意先除后乘避免溢出
    lcm = a // g * b
    # 输出最小公倍数
    print(lcm)

# 当此模块作为主程序执行时,调用main函数
if __name__ == "__main__":
    main()

七、JavaScript算法源码

"use strict";

// 定义函数计算最大公约数,使用欧几里得算法
function gcd(a, b) {
    // 如果b等于0,则返回a,否则递归调用gcd函数
    return b === 0 ? a : gcd(b, a % b);
}

// 主函数,用于读取输入并计算最小公倍数
function main() {
    // 定义变量存储输入数据
    let input = '';
    // 监听标准输入的数据事件,累积数据到input变量
    process.stdin.on('data', function(chunk) {
        input += chunk;
    });
    // 当输入结束后执行回调函数
    process.stdin.on('end', function() {
        // 使用正则表达式去除多余空格,并分割字符串得到数组
        let tokens = input.trim().split(/\s+/);
        // 将第一个和第二个元素转为整数,分别赋值给a和b
        let a = parseInt(tokens[0], 10);
        let b = parseInt(tokens[1], 10);
        // 计算a和b的最大公约数
        let g = gcd(a, b);
        // 根据公式计算最小公倍数:先除后乘,防止溢出
        let lcm = a / g * b;
        // 输出结果到标准输出
        console.log(lcm);
    });
}

// 调用主函数执行程序
main();

八、C算法源码

#include <stdio.h>

// 定义函数计算最大公约数,使用欧几里得算法
long long gcd(long long a, long long b) {
    // 如果b为0,则a为最大公约数,直接返回a
    if (b == 0)
        return a;
    else
        // 否则递归调用gcd函数,计算b和a%b的最大公约数
        return gcd(b, a % b);
}

int main() {
    long long a, b;
    // 从标准输入读取两个正整数
    scanf("%lld %lld", &a, &b);
    // 调用gcd函数计算a和b的最大公约数
    long long g = gcd(a, b);
    // 根据公式计算最小公倍数:lcm = a / g * b
    long long lcm = a / g * b;
    // 将结果输出到标准输出
    printf("%lld\n", lcm);
    return 0; // 返回0表示程序正常结束
}

九、C++算法源码

#include <iostream>
using namespace std;

// 定义函数计算最大公约数,使用欧几里得算法
long long gcd(long long a, long long b) {
    // 如果b为0,则返回a,否则递归调用gcd函数
    return b == 0 ? a : gcd(b, a % b);
}

int main() {
    long long a, b;
    // 从标准输入读取两个正整数
    cin >> a >> b;
    // 调用gcd函数计算a和b的最大公约数
    long long g = gcd(a, b);
    // 根据公式计算最小公倍数:先除后乘避免溢出
    long long lcm = a / g * b;
    // 将结果输出到标准输出,并换行
    cout << lcm << endl;
    return 0; // 返回0表示程序正常结束
}


🏆下一篇:华为OD机试真题 - 简易内存池(Python/JS/C/C++ 2024 E卷 200分)

🏆本文收录于,华为OD机试真题(Python/JS/C/C++)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。

在这里插入图片描述

;