Python中的 gcd()
最高公因数 (HCF) 也称为 gcd,可以使用数学模块提供的单个函数在Python中计算,因此可以在许多情况下使任务更容易。
计算 gcd 的朴素方法
- 使用递归:
- 使用循环
- 使用欧几里得算法
# Python code to demonstrate naive # method to compute gcd ( Euclidean algo ) def computeGCD(x, y): while(y): x, y = y, x % y return x a = 60 b= 48 # prints 12 print ("The gcd of 60 and 48 is : ",end="") print (computeGCD(60,48))
输出:
The gcd of 60 and 48 is : 12
使用Python的 math.gcd()函数
使用 gcd() 可以只用一行计算相同的 gcd。math.gcd( x, y ) Parameters : x : Non-negative integer whose gcd has to be computed. y : Non-negative integer whose gcd has to be computed. Return Value : This method will return an absolute/positive integer value after calculating the GCD of given parameters x and y. Exceptions : When Both x and y are 0, function returns 0, If any number is a character , Type error is raised.
# Python code to demonstrate gcd() # method to compute gcd import math # prints 12 print ("The gcd of 60 and 48 is : ",end="") print (math.gcd(60,48))
输出:
The gcd of 60 and 48 is : 12
常见异常
此函数中的一些常见异常是:- 两个数都是0,gcd是0
- 如果只有一个数字不是数字,则会引发类型错误。
# Python code to demonstrate gcd() # method exceptions import math # prints 0 print ("The gcd of 0 and 0 is : ",end="") print (math.gcd(0,0)) # Produces error print ("The gcd of a and 13 is : ",end="") print (math.gcd('a',13))
输出:
The gcd of 0 and 0 is : 0 The gcd of a and 13 is :
运行时错误:
Traceback (most recent call last): File "/home/94493cdfb3c8509146254862d12bcc97.py", line 12, in print (math.gcd('a',13)) TypeError: 'str' object cannot be interpreted as an integer
# Python code to demonstrate naive
# method to compute gcd ( recursion )
def hcfnaive(a,b):
if(b==0):
return a
else:
return hcfnaive(b,a%b)
a = 60
b= 48
# prints 12
print ("The gcd of 60 and 48 is : ",end="")
print (hcfnaive(60,48))
输出:
The gcd of 60 and 48 is : 12
# Python code to demonstrate naive
# method to compute gcd ( Loops )
def computeGCD(x, y):
if x > y:
small = y
else:
small = x
for i in range(1, small+1):
if((x % i == 0) and (y % i == 0)):
gcd = i
return gcd
a = 60
b= 48
# prints 12
print ("The gcd of 60 and 48 is : ",end="")
print (computeGCD(60,48))
输出:
The gcd of 60 and 48 is : 12