繁体   English   中英

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

[英]Why isn't my python solution for a Project Euler problem working?

我一直在尝试项目欧拉问题,但似乎无法解决问题 7( https://projecteuler.net/problem=7 )。 一个大问题是我的解决方案不起作用,所以我尝试重写它,但它仍然拒绝给我一个 output,它告诉我我在某个地方出错了。

##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)

您的 primalty 测试未正确实施。 目前,每次您的数字n没有除数时,您都会将变量p相加。 例如,如果您的n为 13,则您的p将增加 5 或 6,而不是 1。

您需要重写您的素数检查,以便如果 n 是素数,它将向p添加 1,如果n不是素,则不向p添加任何内容。

您可以为此编写一个 function,这使您的代码更具可读性和更易于使用。

这样的原始检查 function 可能如下所示:

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

这个 function 没有针对速度进行优化,但它适用于我的欧拉问题 #7 解决方案,以在 0.132 秒内获得正确的 output。

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

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

  2. 设置一个足够大的埃拉托色尼筛,以包括该数字。

  3. 通过筛子数数以找到第 10_001 个素数。

您的筛子代码将对其他 Project Euler 问题很有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM