|
发表于 2016-11-3 00:29:05
|
显示全部楼层
哎,写这个程序费了好久。
这个题目其实就是求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 |
|