首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >项目Euler #7 Python

项目Euler #7 Python
EN

Stack Overflow用户
提问于 2014-08-28 18:11:38
回答 4查看 5.9K关注 0票数 0

我的密码出问题了。问题是:

“通过列出前六个素数: 2、3、5、7、11和13,我们可以看到第6个素数是13。10001素数是什么?”

看上去是这样的:

代码语言:javascript
复制
div = 10001
i = 2
count = 0
prime = 0
now = []

while count < div:

    for x in range (2,i+1):
        if len(now) ==2:
            break
        elif i%x == 0:
            now.append(x)

    if len(now)==1:
        prime = i
        count += 1
    now = []
    i+=1       



print(prime)

我试过div高达1000,它似乎很好(对于div 1000,我收到7919)。然而,当我尝试div = 10001时,我什么也得不到,甚至没有错误。如果有人帮我,我会很感激的。谢谢。

EN

回答 4

Stack Overflow用户

发布于 2020-05-20 06:37:26

代码语言:javascript
复制
# 7 10001st prime

import itertools


def is_prime(n):
    for i in range(2, n//2 + 1):
        if n % i == 0:
            return False
        else:
            continue
    return True


p = 0
for x in itertools.count(1):
    if is_prime(x):
        if p == 10001:
            print(x)
            break
        p += 1
票数 2
EN

Stack Overflow用户

发布于 2014-09-21 23:42:40

试试下面的代码:

代码语言:javascript
复制
prime_list = lambda x:[i for i in xrange(2, x+1) if all([i%x for x in xrange(2, int(i**0.5+1))])][10000]
print prime_list(120000)

Python中的Lambda定义了一个匿名函数,xrange与range类似,定义了一个整数范围。代码使用列表理解,并两次遍历这些数字,直到最后一个数字的平方根(因此,i**0.5)。如果每个数字是范围计数中的数字的倍数,则每个数字都会被消除。您将得到一个按顺序排列的素数列表。所以,你只需要用正确的索引打印数字。

票数 1
EN

Stack Overflow用户

发布于 2018-12-09 03:40:37

只要对代码进行一些简单的修改(和简化),您就可以在1/3秒钟内计算要查找的数字。首先,我们只检查@Hashman建议的平方根。接下来,我们只测试并除以奇数,将2作为特例预先处理。最后,我们抛出整个now数组长度逻辑,并简单地利用break逻辑:

代码语言:javascript
复制
limit = 10001
i = 3
count = 1
prime = 2

while count < limit:

    for x in range(3, int(i ** 0.5) + 1, 2):
        if i % x == 0:
            break
    else:  # no break
        prime = i
        count += 1

    i += 2

print(prime)

和以前一样,这给了我们7919的限制,1000,它给了我们104743,我们的极限为10001。但这还不如筛子快。

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

https://stackoverflow.com/questions/25555350

复制
相关文章

相似问题

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