def hcf(u, v):
目前成都创新互联已为成百上千的企业提供了网站建设、域名、虚拟主机、绵阳服务器托管、企业网站设计、肇州网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
global a
if u % v == 0:
a = v
else:
m = u % v
n = v
hcf(n, m)
return a
def lcd(u, v, h):
return u * v / h
def main():
print(" 【请连续三次求得输入的两个整数最大公约数和最小公倍数:】")
for n in range(3):
print(" 【第%d 次:】" % (n + 1))
u = int(input(" 【请输入第一个整数:】"))
v = int(input(" 【请输入第二个整数:】"))
h = hcf(u, v)
print(" 【%d 和%d 的最大公约数为:】%d" % (u, v, h))
l = lcd(u, v, h)
print(" 【%d 和%d 的最小公倍数为:】%d" % (u, v, l))
if __name__ == '__main__':
main()
基本是按照模板案例写的了
提到最大公约数,那么就不得不说什么是公约数,它是一个能被若干个整数同时均整除的整数。如果一个整数同时是几个整数的约数,称这个整数为它们的“公约数”;公约数中最大的称为最大公约数。对任意的若干个正整数,1总是它们的公因数。
举个例子:30和40的公约数有:1,2,5,10,那么10是这几个里面最大的,就是30和40的最大公约数。
python求最大公约数
1.python求最大公约数设计思路
给定两个数,从1开始尝试,步长为1逐渐递增,为了优化算法,只需要循环到两个数中最小的那个数就可以。所以,第一步就是计算出两个数中最小的数,然后利用for循环从1到最小的那个数进行枚举,如果该数能够同时被两个数整除,则记录下来,直到循环结束,最后,最大的这个就是最大公约数。
特别注意:这里会用到range函数,range(0,5)的结果为0,1,2,3,4注意是没有5的,因此在本例中循环时应该是从1到最小的那个数+1才对。
2.最大公约数的python实现
打开百度APP,查看更多高清图片
说明:在上面的代码中,我们会用到自定义函数的定义方法:def ,两个数的最小数的判断方法,for循环和枚举取值,整除取余,输入输出等内置函数。
函数定义:
Common_multiple(number1, number2): # 求两个数的最小公倍数
Maximum_common_divisor(*number): # 求任意多个数的最小公倍数
Minimum_common_multiple(*number): # 求任意多个数的最大公因数
程序缩进如下:
程序缩进
运行结果展示:
运行结果
函数具体代码:缩进版本点击自取
def Common_multiple(number1, number2): # 求两个数的最小公倍数
while number1 % number2 != 0:
number1, number2 = number2, (number1 % number2)
return number2
def Maximum_common_divisor(*number): # 求任意多个数的最小公倍数
while len(number) 1:
number = [Common_multiple(number[i], number[i+1]) for i in range(0, len(number)-1)]
return number[0]
def Minimum_common_multiple(*number): # 求任意多个数的最大公因数
while len(number) 1:
number = [number[i]*number[i+1]/Common_multiple(number[i], number[i+1]) for i in range(0, len(number)-1)]
return number[0]
# 定义一个函数
def gcd(x, y):
"""该函数返回两个数的最大公约数"""
# 获取最小值
if x y:
smaller = y
else:
smaller = x
for i in range(1,smaller + 1):
if((x % i == 0) and (y % i == 0)):
hcf = i
return gcd
# 用户输入两个数字
num1 = int(input("输入第一个数字: "))
num2 = int(input("输入第二个数字: "))
print( num1,"和", num2,"的最大公约数为", gcd(num1, num2))
def showMaxFactor(num):
----count = num//2
----while count 1:
--------if num % count ==0:
------------print('%d最大的约数是%d'%(num,count))
------------break
--------else:
------------count -=1
----else:
------------print('%d是素数'%num)
num= int(input('请输入一个数:'))
showMaxFactor(num)
算法应该是上面这个,你的漏掉一个else
count = num//2 这个是整除,得到的是num除以2的整数部分,和count = num/2不同(25//2=12,25/2=12.5)
这个算法属于暴力求解,先找到一个‘假设的最大公约数’count(整数),然后尝试num能不能整除count,如果能整除,那就是最大约数,如果不能count-1,继续尝试直到得到最大约数。因为2是除了1之外的最小素数,所以任何一个num的最大约数都不可能超过num/2,所以起始的count假设为num//2。当然你也可以假设为比num//2大的整数,只是会浪费计算而已。