在Python中求最大公约数和最小公倍数

一、最大公约数gcd

        (1)gcd函数只接受两个整数作为参数,如果传入的不是整数,会抛出TypeError。此外,如果两个数中有一个是0,gcd函数会返回另一个数的绝对值,因为任何数和0的最大公约数是该数的绝对值。以下是gcd函数的基本用法:

import math

num1 = 56
num2 = 98
result = math.gcd(num1, num2)
print(f"{num1}和{num2}的最大公约数是: {result}")

运行结果将是:56和98的最大公约数是: 14

        (2)如果你需要计算多个数的最大公约数,可以使用functools模块中的reduce函数结合gcd函数来实现。

import math
from functools import reduce

numbers = [56, 98, 32]
result = reduce(math.gcd, numbers)
print(f"{numbers}的最大公约数是: {result}")

   (3)reduce函数的作用是对一个可迭代对象(如列表、元组等)中的元素进行累积计算,最终返回一个单一的结果。它的基本思想是将可迭代对象中的元素两两结合,逐步应用一个指定的函数,直到所有元素都被处理完毕。reduce函数的基本语法如下:

from functools import reduce

result = reduce(function, iterable[, initializer])
  • function:一个函数,用于对可迭代对象中的元素进行操作。这个函数必须接受两个参数。

  • iterable:一个可迭代对象,如列表、元组等。

  • initializer(可选):一个初始值,用于在累积计算之前提供一个起始值。如果提供了initializer,则reduce会从iterable的第一个元素开始计算;如果没有提供,则从iterable的第一个和第二个元素开始计算。

二、最小公倍数lcm

        通过最大公约数(GCD)来计算最小公倍数(LCM),两个整数的最小公倍数可以通过它们的最大公约数来计算,使用以下公式:

LCM(a,b)=∣a×b∣ ​/ GCD(a,b) 

这里,a 和 b 是两个整数,GCD(a,b) 是它们的最大公约数,LCM(a,b) 是它们的最小公倍数。

        (1)Python示例,其中abs(a*b)是求ab相乘的绝对值

import math

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

# 示例
num1 = 12
num2 = 18
result = lcm(num1, num2)
print(f"{num1}和{num2}的最小公倍数是: {result}")

运行结果将是:12和18的最小公倍数是: 36

        (2)同上可得,求多个书的最小公倍数可以使用functools模块中的reduce函数实现。

import math
from functools import reduce

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

def lcm_multiple(numbers):
    return reduce(lcm, numbers)

# 示例
numbers = [12, 18, 24]
result = lcm_multiple(numbers)
print(f"{numbers}的最小公倍数是: {result}")

        (3)如果python的版本是3.9及以上,则lcm函数不用自己通过gcd函数定义,因为math库中包含了所以可以直接引用,那么代码可以简化,即与gcd函数的使用方式相同。

import math
from functools import reduce

numbers = [12, 18, 24]
result = reduce(math.lcm, numbers)
print(f"{numbers}的最小公倍数是: {result}")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值