哎,写这个程序费了好久。
这个题目其实就是求1-20所有数的最小公倍数,将其转化为逐个求两项的最小公倍数问题。
# Python 3.5实现求解最小的能被1-20中每个数整除的正整数
def gcd(Num1,Num2):
'''辗转相除法即欧几里德算法(Euclidean algorithm)
用于求两个正整数之最大公因子的算法
'''
if Num1 < Num2:
Num1, Num2 = Num2, Num1
if Num1 == Num2:
return Num2
else:
while True:
r = Num1 % Num2
if r == 0:
return Num2
else:
Num1, Num2 = Num2, r
def lcm(Num1, Num2):
'''求两个正整数之最小公倍数的算法'''
result = Num1 * Num2 // gcd(Num1, Num2)
return result
def smallestMultiple(start, end):
Product = 1
if end < start:
start, end = end, start
if (not isinstance(start, int)) or (not isinstance(end, int)):
print('请输入两个正整数!')
else:
p = list(range(start, end + 1))
lenP = len(p)
for i in range(lenP):
n1 = Product
n2 = p[i]
Product = lcm(n1, n2)
return Product
sM = smallestMultiple(1, 10)
print('最小的能被1-10中每个数整除的正整数为:%d'%sM)
sM = smallestMultiple(1, 20)
print('最小的能被1-20中每个数整除的正整数为:%d'%sM)
>>>
最小的能被1-10中每个数整除的正整数为:2520
最小的能被1-20中每个数整除的正整数为:232792560 |