一、最大公约数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}")