问题:
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?
第一次思路:对一个n求出它因子,并把它放到一个set里面。
所以1-10的话,只要求出10个set,并把合并起来。
然后set里的元素做乘积运算。。这个就是最终结果了。
很明显的,我这个是有问题的,2的因子为set({1,2}),而8的因子也为set({1,2}),那么最小公倍数为2 吗。这显示不可能。
我的第一种思路破产了。。
由此我认识到,不但要显示因子,还要显示因子的个数。
接下来是我的最终代码了:
import datetime
###############主程序###################
known={1:{1:1},2:{1:1,2:1}}
def uniondict (d1,d2):
for key,value in d2.iteritems() :
value1=d1.get(key,0)
d1[key]=value1+value
def allit (n):
if n in known:
return known[n]
else:
dict1=dict()
divisor=2
while n%divisor!=0:
divisor+=1
dict1[divisor]=dict1.get(divisor,0)+1
uniondict(dict1,allit(n/divisor))
known[n]=dict1
return dict1
def getmultiple (m,n):
set1=dict()
for item in xrange(m,n+1) :
tem_set=allit(item)
print item,tem_set
for key,value2 in tem_set.iteritems() :
value1=set1.get(key,0)
if value1==0:
set1[key]=value2
else:
set1[key]=max(value1,value2)
mul_result=1
for key,value in set1.iteritems() :
mul_result*=key**value
return mul_result
start=datetime.datetime.now()
print getmultiple(1,20)
end=datetime.datetime.now()
print (end-start)
。恩,结果对了,不过,代码有点小长。。。
大牛的代码:
def delbart(t,n):
if n > 0:
if not (t%n):
if delbart(t, n-1):
return True
else:
return False
else:
return False
else:
return True
start=datetime.datetime.now()
i = 20
while not delbart(i,20):
i +=20
print i
end=datetime.datetime.now()
print (end-start)
这个思路:
delbart表示一个只有当n<0或者t能被[1,n]的所有数整除时才表示真。
。。这个代码代码量比我的少很多,但是比我慢。。
大牛2的代码:
i = 1
for k in (range(1, 21)):
if i % k > 0:
for j in range(1, 21):
if (i*j) % k == 0:
i *= j
break
print i
,不足10行啊。。速度也很快啊。我花了快半个小时了啊。。。叫人怎么活啊。
大牛3的代码:
import datetime
###############主程序###################
def gcd(a, b):
while b != 0:
a, b = b, a % b
return a
def lcm(a, b):
return a*b/gcd(a, b)
start=datetime.datetime.now()
print reduce(lcm, range(1, 20+1))
end=datetime.datetime.now()
print (end-start)
![哭](http://static.blog.csdn.net/xheditor/xheditor_emot/default/cry.gif)
![抓狂](http://static.blog.csdn.net/xheditor/xheditor_emot/default/crazy.gif)