最大公约数和最小公倍数-多语言

目录

[C 语言实现](#C 语言实现)

[Python 实现](#Python 实现)

[Java 实现](#Java 实现)

[Js 实现](#Js 实现)


**题目:**输入两个正整数m和n,求其最大公约数和最小公倍数。

程序分析:

  • 最小公倍数=输入的两个数之积除于它们的最大公约数,关键是求出最大公约数;

  • 求最大公约数用辗转相除法(又名欧几里德算法)

1、证明:设c是a和b的最大公约数,记为c=gcd(a,b),a>=b,

令r = a mod b

设a = kc,b = jc,则k,j互素,否则c不是最大公约数

据上,r = a-mb = kc-mjc = (k-mj)c

可知r也是c的倍数,且k-mj与j互素,否则与前述k,j互素矛盾,

由此可知,b与r的最大公约数也是c,即gcd(a,b) = gcd(b,a mod b),得证。

2、算法描述:

第一步:a ÷ b,令r为所得余数(0≤r 第二步:互换:置 a←b,b←r,并返回第一步。

C 语言实现

objectivec 复制代码
#include <stdio.h>

int main() {
    int a, b, t, r;

    // 提示用户输入两个数字
    printf("请输入两个数字:\n");
    scanf("%d %d", &a, &b);

    // 确保 a 是较大的数字
    if (a < b) {
        t = b;
        b = a;
        a = t;
    }

    // 计算 a 和 b 的乘积
    int n = a * b;

    // 使用辗转相除法计算最大公约数
    r = a % b;
    while (r != 0) {
        a = b;
        b = r;
        r = a % b;
    }

    // 输出结果
    printf("这两个数的最大公约数是 %d,最小公倍数是 %d\n", b, n / b);

    return 0; // 返回0表示程序正常结束
}
  1. 头文件 :包含标准输入输出库 #include <stdio.h>
  2. 主函数int main() 是程序的入口点。
  3. 输入 :使用 scanf 获取用户输入的两个整数 ab
  4. 确保 a 是较大的数字 :如果 a 小于 b,则交换它们的值。
  5. 计算乘积 :计算 ab 的乘积并存储在 n 中。
  6. 计算最大公约数:使用辗转相除法(欧几里得算法)计算最大公约数。
  7. 输出结果 :使用 printf 输出最大公约数和最小公倍数(通过 n / b 计算)。
  8. 返回值return 0; 表示程序正常结束。

这种实现方式清晰易懂,能够正确计算并输出两个数字的最大公约数和最小公倍数。

Python 实现

python 复制代码
def main():
    # 提示用户输入两个数字
    a, b = map(int, input("请输入两个数字:\n").split())

    # 确保 a 是较大的数字
    if a < b:
        a, b = b, a

    # 计算 a 和 b 的乘积
    n = a * b

    # 使用辗转相除法计算最大公约数
    r = a % b
    while r != 0:
        a, b = b, r
        r = a % b

    # 输出结果
    print(f"这两个数的最大公约数是 {b},最小公倍数是 {n // b}")

if __name__ == "__main__":
    main()  # 调用主函数
  • 使用 input() 函数获取用户输入,并使用 map()split() 将输入的字符串转换为两个整数。
  • 通过条件判断确保 a 是较大的数字。
  • 计算两个数字的乘积 n
  • 使用辗转相除法计算最大公约数。
  • 最后输出最大公约数和最小公倍数

Java 实现

java 复制代码
import java.util.Scanner;

public class GCDAndLCM {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 提示用户输入两个数字
        System.out.println("请输入两个数字:");
        int a = scanner.nextInt();
        int b = scanner.nextInt();

        // 确保 a 是较大的数字
        if (a < b) {
            int t = b;
            b = a;
            a = t;
        }

        // 计算 a 和 b 的乘积
        int n = a * b;

        // 使用辗转相除法计算最大公约数
        int r = a % b;
        while (r != 0) {
            a = b;
            b = r;
            r = a % b;
        }

        // 输出结果
        System.out.printf("这两个数的最大公约数是 %d,最小公倍数是 %d\n", b, n / b);

        scanner.close(); // 关闭扫描器
    }
}
  1. 使用 Scanner 类获取用户输入。
  2. 提示用户输入两个数字,并将其存储在变量 ab 中。
  3. 通过条件判断确保 a 是较大的数字。
  4. 计算两个数字的乘积 n
  5. 使用辗转相除法计算最大公约数。
  6. 最后输出最大公约数和最小公倍数。
  7. 关闭 Scanner 以释放资源。

Js 实现

javascript 复制代码
function calculateGCDAndLCM() {
    // 提示用户输入两个数字
    const a = parseInt(prompt("请输入第一个数字:"));
    const b = parseInt(prompt("请输入第二个数字:"));

    // 确保 a 是较大的数字
    let larger = Math.max(a, b);
    let smaller = Math.min(a, b);

    // 计算 a 和 b 的乘积
    const n = larger * smaller;

    // 使用辗转相除法计算最大公约数
    let r = larger % smaller;
    while (r !== 0) {
        larger = smaller;
        smaller = r;
        r = larger % smaller;
    }

    // 输出结果
    alert(`这两个数的最大公约数是 ${smaller},最小公倍数是 ${n / smaller}`);
}

// 调用函数
calculateGCDAndLCM();
  1. 使用 prompt() 函数获取用户输入,并将输入的字符串转换为整数。
  2. 使用 Math.max()Math.min() 确保 larger 是较大的数字,smaller 是较小的数字。
  3. 计算两个数字的乘积 n
  4. 使用辗转相除法计算最大公约数。
  5. 最后使用 alert() 输出最大公约数和最小公倍数。

注意:

  • 该代码在浏览器环境中运行,因为它使用了 prompt()alert() 函数来与用户交互。
相关推荐
郝学胜-神的一滴2 分钟前
深入解析Python字典的继承关系:从abc模块看设计之美
网络·数据结构·python·程序人生
百锦再4 分钟前
Reactive编程入门:Project Reactor 深度指南
前端·javascript·python·react.js·django·前端框架·reactjs
百锦再7 分钟前
React编程高级主题:测试代码
android·前端·javascript·react.js·前端框架·reactjs
JH307343 分钟前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
HABuo43 分钟前
【linux文件系统】磁盘结构&文件系统详谈
linux·运维·服务器·c语言·c++·ubuntu·centos
颜酱1 小时前
图结构完全解析:从基础概念到遍历实现
javascript·后端·算法
m0_736919102 小时前
C++代码风格检查工具
开发语言·c++·算法
yugi9878382 小时前
基于MATLAB强化学习的单智能体与多智能体路径规划算法
算法·matlab
喵手2 小时前
Python爬虫实战:旅游数据采集实战 - 携程&去哪儿酒店机票价格监控完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集结果csv导出·旅游数据采集·携程/去哪儿酒店机票价格监控
Coder_Boy_2 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习