python经典百题之最大公约数与最小公倍数

2023-09-21 12:47:45

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

方法1: 辗转相除法(欧几里德算法)求最大公约数

def gcd_euclidean(m, n):
    while n:
        m, n = n, m % n
    return m

m = 36
n = 48
gcd_result = gcd_euclidean(m, n)
print("GCD:", gcd_result)

# 计算最小公倍数公式: LCM = m * n / GCD
lcm_result = (m * n) // gcd_result
print("LCM:", lcm_result)

思路:

  • 使用辗转相除法(欧几里德算法),不断地用较小数去除较大数,直到余数为0。最终的除数就是最大公约数。

优点:

  • 算法简单、高效,适用于大整数。

缺点:

  • 除法运算可能会引入浮点数运算误差,需要注意。

方法2: 更相减损术求最大公约数

def gcd_subtraction(m, n):
    if m == n:
        return m
    elif m > n:
        return gcd_subtraction(m - n, n)
    else:
        return gcd_subtraction(m, n - m)

m = 36
n = 48
gcd_result = gcd_subtraction(m, n)
print("GCD:", gcd_result)

# 计算最小公倍数公式: LCM = m * n / GCD
lcm_result = (m * n) // gcd_result
print("LCM:", lcm_result)

思路:

  • 使用更相减损术,不断地用较大数减去较小数,直到两数相等。最终的相等数就是最大公约数。

优点:

  • 算法简单、直观。

缺点:

  • 算法的递归深度可能较大,特别是对于较大的整数。

方法3: 利用公式求最小公倍数

def lcm_formula(m, n):
    # LCM = m * n / GCD
    gcd_result = gcd_euclidean(m, n)
    return (m * n) // gcd_result

m = 36
n = 48
gcd_result = gcd_euclidean(m, n)
print("GCD:", gcd_result)

lcm_result = lcm_formula(m, n)
print("LCM:", lcm_result)

思路:

  • 利用最大公约数公式求最小公倍数。

优点:

  • 可以重用最大公约数算法,简化计算。

缺点:

  • 需要调用最大公约数算法。

方法总结及推荐

  • 推荐方法: 方法1中的辗转相除法(欧几里德算法)是最常用且高效的方法,它能够快速求解最大公约数,并通过公式直接计算最小公倍数。

  • 适用场景:

    • 对于最大公约数和最小公倍数的求解,推荐使用辗转相除法(欧几里德算法)及公式计算,因为它们简单、高效,并且能够处理大整数。
    • 更相减损术可以作为一种直观的方法,但可能在递归深度较大时效率不高。
更多推荐

ChatGPT企业版来了,速度翻倍,无使用限制

美国时间8月28日,OpenAI宣布了自ChatGPT推出以来最重大的新闻:将推出ChatGPT企业版,企业版ChatGPT将直接对接GPT-4,提供无限制访问、高级数据分析功能、定制服务等服务,并支持处理更长文本输入的长上下文窗口。OpenAI首席运营官BradLightcap告诉媒体,这个工具已经在“不到一年”的时

logback日志是怎么保证多线程输出日志线程安全的

logback中的单例模式logback日志框架使用了单例设计模式来进行日志输出。在logback中,Logger类是一个关键的组件,它负责记录和输出日志消息。Logger类使用了单例设计模式,确保在一个应用程序中只存在一个Logger实例。这样做的好处是可以确保所有的日志消息都被集中到同一个日志输出器中,避免了多个日

无人机“长坡”上,谁是滚出“厚雪球”的长期主义者?

“股神”巴菲特,曾提出过“长坡厚雪”的理论:人生就像滚雪球,重要的是发现很湿的雪和很长的坡。运用到企业经营上,“长坡”指的是企业所布局的领域发展潜力足、空间大;而“湿雪”,指的是企业竞争力强、有长期主义精神。将湿雪沿着长坡不断滚成厚雪球,就能收获长期主义的复利。就当下来看,在众多领域当中,无人机属于典型的“长坡”。全球

《时代》百大AI人物榜单公布,李彦宏、Sam Altman、黄仁勋等评为全球AI领袖

9月7日晚,《时代》周刊发布了首届全球百大AI人物。这100个人组成的群体在很多方面都是推动人工智能发展的关系和权力中心的地图。他们是竞争对手和监管者、科学家和艺术家、倡导者和高管——既竞争又合作的人类,他们的洞察力、欲望和缺陷将塑造这个影响力日益增强的技术的方向。”“人工智能的独特之处也是最令人恐惧和值得庆祝的地方,

生产消费者模型的介绍以及其的模拟实现

目录生产者消费者模型的概念生产者消费者模型的特点基于阻塞队列BlockingQueue的生产者消费者模型对基于阻塞队列BlockingQueue的生产者消费者模型的模拟实现ConProd.c文件的整体代码BlockQueue.h文件的整体代码对【基于阻塞队列BlockingQueue的生产者消费者模型的模拟实现】的测试

openGauss学习笔记-70 openGauss 数据库管理-创建和管理普通表-查看表数据

文章目录openGauss学习笔记-70openGauss数据库管理-创建和管理普通表-查看表数据70.1查询数据库所有表的信息70.2查询表的属性70.3查询表的数据量70.4查询表的所有数据70.5查询字段的数据70.6过滤字段的重复数据70.7查询字段为某某的所有数据70.8按照字段进行排序openGauss学习

深入学习 Redis Sentinel - 基于 DockerCompose 编排哨兵分布式架构,理解工作原理

目录一、哨兵模式1.1、为何引入哨兵模式1.2、RedisSentinel分布式架构1.2.1、概述1.2.2、工作原理(redis哨兵的核心功能)1.监控:2.自动故障转移:3.通知1.2.3、问题:哨兵结点只有一个可以么?1.3、使用Docker和DockerCompose模拟部署哨兵模式1.3.1、前言1.3.2

搭建ELK+Filebead+zookeeper+kafka实验

部署Zookeeper集群准备3台服务器做Zookeeper集群192.168.10.17192.168.10.21192.168.10.221.安装前准备关闭防火墙systemctlstopfirewalldsystemctldisablefirewalldsetenforce0安装JDKyuminstall-yja

Vulnhub实战-DC9

前言本次的实验靶场是Vulnhub上面的DC-9,其中的渗透测试过程比较多,最终的目的是要找到其中的flag。一、信息收集对目标网络进行扫描arp-scan-l对目标进行端口扫描nmap-sC-sV-oAdc-9192.168.1.131扫描出目标开放了22和80两个端口,访问目标的80端口。对目标进行目录扫描与分析。

第三十章 Classes - 方法生成器

[toc]第三十章Classes-方法生成器方法生成器方法生成器是类编译器在类编译期间调用的程序。它的输出是该方法的实际运行时实现。方法生成器提供了一种继承方法的方法,可以生成根据继承类或属性的需要定制的高性能、专用代码。在IRIS库中,方法生成器广泛用于数据类型和存储类。ClassQueries类可以包含类查询。类查

【自学开发之旅】Flask-会话保持-API授权-注册登录

http-无状态-无法记录是否已经登陆过#会话保持–sessioncookiesession–保存一些在服务端cookie–保存一些数据在客户端session在单独服务器D上保存,前面数个服务器A,B,C上去取就好了,业务解耦。—》》现在都是基于token的验证。以上是基于BS架构API授权由服务端完全把控三张表,ap

热文推荐