一、判断最大公约数:
我想到的:
def hcf(x,y):
if x > y :
small = y
else:
small = x
for i in range(small,1,-1):
# for i in range(1,small + 1):
print("Inter i word", i)
if x % i == 0 and y % i == 0:
print("Max",i)
break
一开始我想到的是我注释的那一行,就是正取值,举例:12和24,结果为循环的最后一次的值:12,我想循环这么多次,在开发中,浪费太大,我反过来循环取值,
第一次不就取到了,就是现在运行的。后来又想到一对数值:24,39,这种情况下,正循环比反循环循环次数更少。所以想是否有更好的方法。
我搜到的:辗转相除法(自认为效果最好的)
def gcd(x, y):
m = max(x, y)
n = min(x, y)
while m%n:
m, n = n, m%n
return n
欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。
二、判断公倍数
def MinNum(x,y):
m = max(x,y)
while True:
if (m % x == 0) and (m % y == 0):
MinNum = m
break
m += 1
return MinNum
这是我一开始想到的,感觉要是数字过大,循环次数过多,又想到辗转相除法的到最大公约数,得到下面方法:
def gbs(x,y):
m = max(x,y)
n = min(x,y)
while m % n :
m,n = n,m%n
return (x // n) * (y // n) * n