求两个数的最大公约数
题目内容:
输入两个正整数num1和num2(不超过1000),求它们的最大公约数并输出。
我们定义求最大公约数的函数为hcf,给出程序主体如下:
num1=int(input(""))
num2=int(input(""))
print(hcf(num1,num2))
请补充完成hcf函数的定义。
输入格式:
共两行,每一行输入一个不超过1000的正整数。
输出格式:
共一行,输出一个正整数。
输入样例:
6
8
输出样例:
2
My answer
思路一:先百度一下最大公约数的求法。。。常见的有质因数分解法、短除法、辗转相除法、更相减损法,看了后,辗转相除法简单一些。。实在不会就用笨方法,先找出约数,再找最大,先上笨方法
def hcf(a, b):
alist = set()
blist = set()
for i in range(1, a + 1):
if a % i == 0:
alist.add(i)
for j in range(1, b + 1):
if b % j == 0:
blist.add(j)
return max(alist & blist)
num1 = int(input(""))
num2 = int(input(""))
print(hcf(num1, num2))
思路二:辗转相除法,不理解的百度一下
def hcf(a, b):
c, d = max(a, b), min(a, b)
e = 1
while e != 0:
e = c % d
c, d = d, e
return c
num1 = int(input(""))
num2 = int(input(""))
print(hcf(num1, num2))
思路三:老师的方法:较小的那个数可能是最大公约数,我们就从较小的数开始往1遍历,找到能同时整除那两个数的即是最大公约数,这就是知识提高生产力的最直接表现
def hcf(a, b):
for i in range(min(a,b),0,-1):
if a % i ==0 and b % i == 0:
return i
num1 = int(input(""))
num2 = int(input(""))
print(hcf(num1, num2))