首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Euler 12,Slow Code - Python

Euler 12,Slow Code - Python
EN

Stack Overflow用户
提问于 2013-03-01 04:06:35
回答 1查看 98关注 0票数 3

我和Euler Problem 12很纠结。我不想要答案或确切的代码更改,这样我就能做到这一点。我只是希望被引向正确的方向。我运行了这段代码大约10分钟,得到了一个不正确的答案。这使得我相信我的假设是不正确的,即一个因子> 10000的三角形数不会有任何因子> 500。我在想,我需要使用一个更快的素数生成器,让程序停止对列表进行如此多的迭代。我不知道后者该怎么做。

代码语言:javascript
运行
复制
def eratosthenes_sieve(limit):
    primes = {}
    listofprimes = []
    for i in range(2, limit + 1):
        primes[i] = True

    for i in primes:
        factors = range(i, limit + 1, i)
        for f in factors[1:limit + 1]:
            primes[f] = False

    for i in primes:
        if primes[i] == True:
            listofprimes.append(i)
    return listofprimes


def prime_factorization(n):
    global primal
    prime_factors = {}
    for i in primal:
        if n < i:
            i = primal[0]
        if n % i == 0:
            if i not in prime_factors.keys():
                prime_factors[i] = 1
            else:
                prime_factors[i] += 1
            n = n / i
        if n in primal:
            if n not in prime_factors.keys():
                prime_factors[n] = 1
            else:
                prime_factors[n] += 1
            return prime_factors
    return prime_factors    

def divisor_function(input):
    x = 1
    for exp in input.values():
        x *= exp + 1
    return x

def triangle(th):
    terms = []
    for each in range(1, th+1):
        terms.append(each)
    return sum(terms)

z = 1
primal = eratosthenes_sieve(10000)
found = False
while found == False:
triz = triangle(z)
number_of_divisors = divisor_function(prime_factorization(triz))

if number_of_divisors > 300:
    print "GETTING CLOSE!! ********************************"
if number_of_divisors > 400:
    print "SUPER DUPER CLOSE!!! *********************************************************"
if number_of_divisors < 501:
    print "Nope. Not %s...Only has %s divisors." % (triz, number_of_divisors)

    z += 1
else:
    found = True
    print "We found it!"
    print "The first triangle number with over 500 divisors is %s!" % triangle(z)
EN

回答 1

Stack Overflow用户

发布于 2013-03-01 06:01:57

当然,我在发帖几分钟后就明白了。

在我的prime_factorization函数中。

if n%i == 0:在n%i == 0的时候应该是。

这导致程序遗漏了因子,并运行了整个质数列表。

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

https://stackoverflow.com/questions/15144673

复制
相关文章

相似问题

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