题目是:求三个数的最大公约数
我的思路是用辗转相除法求出3个公约数,他们中最小的公约数就是三个数的最大公约数
想简化我的代码a = int(input())
b = int(input())
c = int(input())
########## Begin ##########
t1, t2, t3 = 0, 0, 0
m = a % b #a取余b得m,m为余数
n = b % c #b取余c得n,n为余数
q = a % c #a取余c得q,q为余数
a1,a2,a3,b1,b2,b3,c1,c2,c3 = a,a,a,b,b,b,c,c,c
while m != 0: #比如3%2=1
a1 = b1 #a = 2
b1 = m #b = 1
m = a1 % b1 #c = 0
t1 = b1
while n != 0:
b2 = c2
c2 = n
n = b2 % c2
t2 = c2
while q != 0:
a3 = c3
c3 = q
q = a3 % c3
t3 = c3
t = min(t1, t2, t3)
########## End ##########
print(t)
当然还有其他方法。例如,你可以使用最小值进行递减来寻找最大公约数。这种方式更直观,但效率可能相对较低。下面是这种方法的实现:
def gcd_of_three_numbers(x, y, z):
# 从三个数中找出最小的那个
minimum = min(x, y, z)
# 从最小的数开始递减,检查它是否能整除这三个数
for i in range(minimum, 0, -1):
if x % i == 0 and y % i == 0 and z % i == 0:
return i
a = int(input())
b = int(input())
c = int(input())
# 调用函数计算最大公约数并输出
print(gcd_of_three_numbers(a, b, c))
这个方法通过从最小的数开始递减来寻找最大公约数。这在数字较小时是可行的,但如果数字很大,性能可能不如辗转相除法(也称为欧几里得算法)高效。此外,这种方法不依赖任何额外的库函数,是一种基础而直接的方法。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
|