我是一个编程初学者,刚开始使用python,我一直在努力克服Project的挑战。
我编写了一个解决欧拉#12项目的程序,它要求最小数量的1+ 2+3+…+n有500多个除数。它能很好地处理100这样的较小的数字,但要想找到多达500个因子却花费了很长的时间。大约20分钟后我就放弃了等待。我想要一些帮助优化我的代码,使它更快。
基本上,我做了一个函数,它找到一个给定数的三角形数,另一个函数计算一个数的因子/除数。我做了一个while循环,其中一个数字一直在增加,直到它本身的三角形数有超过500个因子。
这是我的密码:
#Starts the timer to measure time taken for code to run:
import time
start_time = time.time()
#Returns the triangular number of 'num':
def triangular(num):
return int((num*(num+1))/2)
#Returns the number of factors(divisors) of 'num':
def facCount(num):
summ = 0
for i in range(1, num+1):
if num % i == 0:
summ += 1
return summ
#Declares x (starting value):
x = 0
#main:
while True:
#Checks if number of factors for the triangular of x is above 500
if facCount(triangular(x)) > 500:
#Sets the value of 'ans' to the triangular of 'x':
ans = triangular(x)
#Exits the loop since answer is found
break
x += 1
#Prints answer (the first triangular number that has more than 500 factors):
print(ans)
#Prints the time taken for code to execute:
print("--- %s seconds ---" % (time.time() - start_time))发布于 2018-04-03 09:41:21
这个特殊的Euler项目的目的是教你关于除数函数的知识。
def三角( num ):返回int((num*(num+1))/2) #返回'num':def facCount(Num)的因子数(除数):num=0表示范围内的i(1,num+1):如果num%i == 0: num += 1返回和
观察到triangular(n)的某些因素也是triangular(n+1)的影响因素。为什么?你怎么能利用这个理由避免重复做同样的工作呢?
撇开算法上的考虑,
def三角形(Num):返回int((num*(num+1))/2)
如果使用整数除法,则不需要int:
def triangular(num):
return num * (num + 1) // 2发布于 2018-12-16 04:56:31
你必须检查,直到num/2,num/2是偶数的最大因子,sqrt是最大的素数。最后加入到名单上。
https://codereview.stackexchange.com/questions/190852
复制相似问题