一、最大公因数
1.两数的最大公因数
方法一枚举
构想:两数的公因数肯定不会比小的那个数大,所以先找出两数中较小的数min_num,求出min_num的所有因数,从大到小看这些因数是不是max_num的因数就可以
#求最大公因数-直接求
def find_gcd(a, b):
#先计算较小的数的因数,得出因数从大到小看是不是另一个数的因数
max_num=max(a,b)
min_num=min(a,b)
#计算小数的因数
min_num_gcd=[]
for i in range(1,min_num+1):
if min_num%i==0:
min_num_gcd.append(i)
#从大到小判断小数的因数是否为大数的因数
min_num_gcd.sort(reverse=True)
for i in min_num_gcd:
if max_num%i==0:
return i
# 输入整数
first_number = int(input())
second_number = int(input())
# 调用函数
print(find_gcd(first_number, second_number))
方法二 辗转相除法
#求最大公因数-辗转相除法
def find_gcd(a, b):
# 在此处编写代码
while b!=0:
a,b=b,a%b
return a
# 输入整数
first_number = int(input())
second_number = int(input())
# 调用函数
print(find_gcd(first_number, second_number))
方法三 直接用math模块中的方法求
#求最大公因数-math函数
import math;
def find_gcd(a, b):
return math.gcd(a,b)
# 输入整数
first_number = int(input())
second_number = int(input())
# 调用函数
print(find_gcd(first_number, second_number))
2.多个数的最大公因数
#求最大公因数-math函数
import math;
def find_gcd(numbers):
gcd_num = int(numbers[0]) # 初始化第一个数字为最大公因数
for num in numbers[1:]:
gcd_num = math.gcd(gcd_num, int(num)) # 逐个比较并更新最大公因数
return gcd_num
my_input = input("请输入列表元素(以空格分隔):")
nums = my_input.split()
#示例输入
#nums = [3,16,20,5]
print("最大公因数为:", find_gcd(nums))
二、最小公倍数
1.两个数的最小公倍数
方法一 numpy模块
#最小公倍数-numpy
import numpy;
def lcm_multiple(numbers):
return numpy.lcm.reduce(numbers)
a = int(input())
b = int(input())
print('最小公倍数为:', lcm_multiple([a, b]))
方法二 math模块gcd方法
#最小公倍数-gcd
import math
def lcm_multiple(a,b):
return a*b//math.gcd(a,b)
a = int(input())
b = int(input())
print('最小公倍数为:', lcm_multiple(a,b))
2.多个数的最小公倍数
#最小公倍数-gcd
import math;
def lcm_multiple(numbers):
lcm_num=int(numbers[0]) #初始化最小公倍数
for i in numbers[1:]:
lcm_num=lcm_num*int(i)//math.gcd(int(i),lcm_num) #逐个计算更新
return lcm_num
#获取参与计算数,以列表形式传递
my_input = input("请输入列表元素(以空格分隔):")
numbers = my_input.split()
print('最小公倍数为:', lcm_multiple(numbers))