基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出。
提高要求:1.三种以上算法解决两个正整数最大公约数问题。
2.求3个正整数的最大公约数和最小公倍数。
#辗转相除法
def fun1(a,b):
if a<b: #如果a<b则将a,b两数调换使大数作为被除数
a,b = b,a
t = a%b #大数除小数得一个余数赋给t
p = a*b #将两数的乘积赋给p
while t!=0:
a = b # 当余数不为0时,将b赋给a
b = t #将余数赋给b
t = a%b #继续将a除以b的余数赋给t
print( "相除法得最大公约数为:", b ) #当余数为0时,输出b即为最大公约数
print( "相除法得最小公倍数:", int(p/b) ) #用两数乘积除以最大公约数即为最小公倍数
#相减法
def fun2(a,b):
p = a*b
while a!=b :
if a>b :
a = a-b #若a>b,将a-b的值赋给a
else :
b = b-a
print("相减法得最大公约数为:", a) #当a==b时,输出a即为最大公约数
print("相减法得最小公倍数为:", int(p/a)) #用两数乘积除以最大公约数即为最小公倍数
#枚举法
def fun3(a,b):
p = a*b
t = a #将a值赋给t
while t>0 :
if a%t==0 and b%t==0 : #若a除以t的余数和b除以t的余数都为0时,跳出循环
break
t=t-1 #t>0时,每循环一次,t值减一
print("枚举法得最大公约数为:", t) #当跳出循环时,输出t值即为最大公约数
print("枚举法得最小公倍数为:", int(p / t)) #用两数乘积除以最大公约数即为最小公倍数
#用枚举法求三个正整数的最大公约数和最小公倍数
def fun4(a,b,c):
p = a*b*c
if a<b :
min = a
else :
min = b
if min>c :
min = c #找出输入的a,b,c三个数中的最小的数赋给min
while min>0 :
if a%min==0 and b%min==0 and c%min==0 : #若a除以的余数和b除以min的余数和c除以min都为0时,跳出循环
break
min=min-1 #>0时,每循环一次,min值减一
print("枚举法得三个数的最大公约数为:", min) # 当跳出循环时,输出min值即为最大公约数
print("枚举法得三个数的最小公倍数为:", int(p / min)) # 用两数乘积除以最大公约数即为最小公倍数
#定义一个主函数
def main():
a = int(input('请输入第一个整数>>'))
if a>0: #判断输入的数是否为正整数
b = int(input('请输入第二个整数>>'))
if b>0:
fun1(a,b) #调用辗转相除法求最大公约数和最小公倍数
fun2(a,b) #调用相减法求最大公约数和最小公倍数
fun3(a,b) #调用枚举法求最大公约数和最小公倍数
else:
print('输入错误')
else :
print('输入错误') #若输入的不是正数,提示输入错误
c = int(input('请输入第三个整数>>'))
if c>0 :
fun4(a,b,c)
else :
print('输入错误')
if __name__ == '__main__':
main() #执行主函数