题目:
引用
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?
这个题目解得很差,写了个函数,传入1到10,速度还行,传入1到20,竟然计算了XX秒...看来算法太烂了,自我笔试下@@@@
我的python代码:
def gcd(list):
n = max(list)
flag = True
i = 1
while True:
for j in list:
if (n * i) % j != 0:
flag = False
break
if flag:
return n * i
else:
flag = True
i += 1
print gcd(range(1,21))
看了别人的解法,选了个比较大的基数,思路差不多:
i = 9699690 # Continuation.9699690=2*3*5*7*11*13*17*19
while 1:
print "Testing: %s" % i
for x in range(1, 21):
print "%s:" % x,
if i % x != 0:
print "Fail"
break
else:
print "Pass"
else:
print "Solution: %s" % i
break
i+=9699690
一种比较好的解决方案,核心思想是利用分解质因数来求解最大公倍数:
num = 20
'''
isSolved = False
i = 0
while not isSolved:
for ii in range(2,num+1):
if i % ii == 0 and i != 0:
if ii == num: isSolved = True
else:
i = i + num
break
print 'Lowest divisor: ', i
'''
def isPrime(a):
prime=True
for i in range(2,a):
if (a % i == 0): prime=False
if prime: return True
else: return False
factorz = []
primeFactorz = []
def getPrimeFactors(a):
gotFactor = False
for ii in range(2,a+1):
if a % ii == 0:
gotFactor = True
b = a/ii
if isPrime(ii): factors.append(ii)
else: getPrimeFactors(ii)
if isPrime(b) and b != 1: factors.append(b)
else: getPrimeFactors(b)
if gotFactor: break
for i in range(2,num+1):
factors=[]
getPrimeFactors(i)
factorz.append(factors)
print 'Printing Factors of 2 through', num
for i in factorz:
print i
new=[]
total=[]
def getHighestPow(a):
counthigh = 0
for i in factorz:
count = 0
for ii in i:
if ii == a:
count = count + 1
if count > counthigh:
counthigh = count
if a not in new:
new.append(a)
total.append(a**counthigh)
for i in factorz:
for ii in i:
getHighestPow(ii)
sum=1
for i in total:
sum = sum * i
print 'Lowest Common Multiple: ', sum
分享到:
相关推荐
NULL 博文链接:https://lampeter123.iteye.com/blog/423036
ProjectEuler题1-16题代码,直接引入Eclipse就可以用
NULL 博文链接:https://lifethinker.iteye.com/blog/290159
project euler代码库1,已测试通过
NULL 博文链接:https://linuke.iteye.com/blog/1056283
Project-Euler 来自projecteuler.net的练习题 其他信息和链接:
solution to problem 5
Project Euler solutions in assembler.
欧拉计划projecteuler.net
project euler代码库第二部分(已测试通过
project euler代码库第三部分(已测试通过
project euler代码库第五部分(已测试通过
projecteuler.net 我对 Project Euler 问题的一些解决方案: :
项目欧拉解决方案该存储库包含我对 Project Euler (projecteuler.net) 上发现的编程问题的所有答案。 每个解决方案都是用 Java 编写的,旨在从命令行运行。 解决方案文件中将提供指向相关欧拉问题的链接。 某些解决...
project-euler:多种语言的projecteuler.net问题解决方案
在线编程练习网站Euler project的前14题答案
Algorithm-hacktoberfest-projecteuler.zip,此repo包含多种语言的projecteuler问题的解决方案。为新来者特别设计,作为黑客节挑战的一部分。,算法是为计算机程序高效、彻底地完成任务而创建的一组详细的准则。
ProjectEulerQuestions projecteuler.net 上问题的解决方案
project_euler Project Euler 问题的解决方案 ###Problem 1 - 3 和 5 的倍数### 如果我们列出所有 10 以下是 3 或 5 的倍数的自然数,我们得到 3、5、6 和 9。这些倍数的和是 23。求1000 以下所有 3 或 5 的倍数之...
全部在linux下运行通过并得到结果,因为是个人所做,所以不保证是最优结果,仅供交流学习 因为是个人联系所做,所以代码中没有注释,不过我相信只要你真的有去思考题目也是能知道我为什么这样做 ...