为什么我的Project Euler问题的python解决方案不起作用?

时间:2020-06-12 19:43:22

标签: python python-3.x loops primes

我一直在尝试项目欧拉问题,但似乎无法解决问题7(https://projecteuler.net/problem=7)。一个很大的问题是我的解决方案无法正常工作,因此我尝试对其进行重写,但是它仍然拒绝提供输出信息,告诉我在某个地方出错了。

##Problem 7 UNSOLVED
a= 10
b= 1
for c in range (1,a//2):
    while b < 10002:
        if  a % c == 0:
         a=a+1
        else:
         b = b+1
         a= a+ 1
         print (a)

print (a,b)

##Problem 7 v2
n = 10
p = 4
while p <100002:
     for i in range (2,n//2):
        if n % i == 0:
            break
        else:
            p = p +1
        n = n +1

print(n, p)

2 个答案:

答案 0 :(得分:1)

您的原始性测试未正确实施。目前,每当数字 n 没有除数时,就将变量 p 相加。如果您有13个示例作为 n ,则您的 p 将增加5或6,而不是1。

您需要重写原始性检查,以便在 n 为质数时将其添加到 p 中,如果不存在,则不添加任何内容至 p n 不是素数。

您可以为此编写一个函数,从而使您的代码更具可读性且更易于使用。

这种初步检查功能可能看起来像这样:

def is_prime(n):
    for i in range(3, int(n**.5)+1):

        if n % i == 0:
            return 0
    return 1
>>> is_prime(10)
0
>>> is_prime(11)
1

此功能并未针对速度进行优化,但在我的Euler问题#7解决方案中有效,可以在0.132s内获得正确的输出。

请注意,此测试仅适用于大于11的奇数,因为较低的数字将没有任何迭代,因为它们的根小于3。

答案 1 :(得分:1)

  1. 使用素数定理估算第10_0001个素数的大小。

  2. 设置一个足以容纳该数字的Eratosthenes筛。

  3. 数遍筛子以找到10_001st质数。

您的筛网代码将对其他Euler项目问题​​有用。