首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python3.x中的Euler #12项目(高度可分三角数)

Python3.x中的Euler #12项目(高度可分三角数)
EN

Code Review用户
提问于 2018-03-30 10:32:28
回答 2查看 581关注 0票数 0

我是一个编程初学者,刚开始使用python,我一直在努力克服Project的挑战。

我编写了一个解决欧拉#12项目的程序,它要求最小数量的1+ 2+3+…+n有500多个除数。它能很好地处理100这样的较小的数字,但要想找到多达500个因子却花费了很长的时间。大约20分钟后我就放弃了等待。我想要一些帮助优化我的代码,使它更快。

基本上,我做了一个函数,它找到一个给定数的三角形数,另一个函数计算一个数的因子/除数。我做了一个while循环,其中一个数字一直在增加,直到它本身的三角形数有超过500个因子。

这是我的密码:

代码语言:javascript
复制
#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))
EN

回答 2

Code Review用户

发布于 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

代码语言:javascript
复制
def triangular(num):
    return num * (num + 1) // 2
票数 2
EN

Code Review用户

发布于 2018-12-16 04:56:31

你必须检查,直到num/2,num/2是偶数的最大因子,sqrt是最大的素数。最后加入到名单上。

票数 0
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/190852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档