进阶之路

导航

Problem 5: Smallest multiple

2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.

What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?

先从2-10分解质因子来考虑:

2 = 2
3 = 3
4 = 2*2
5 = 5
6 = 2*3
7 = 7
8 = 2*2*2
9 = 3*3
10 = 2*5

而最小的2520的质因子为:2*2*2*3*3*5*7。如何利用2-10的质因子构造出2520的质因子是关键。

a = {}  # 字典,key是质因子,value是质因子个数
for i in range(2,21):  # 从2-20开始遍历
    temp = {}  # 
    while i!= 1:
        for j in range(2,21):
            if i % j == 0:
                temp.setdefault(j,0)
                temp[j]+=1
                i /= j
                break
    for k in temp:
        if a.setdefault(k, 0) < temp[k]:
            a[k]=temp[k]
b = 1    
for i in a:
    b *= i**a[i]

print(b)

 

posted on 2017-12-04 11:28  中年小Q  阅读(150)  评论(0编辑  收藏  举报