为什么不是';我的python项目Euler问题解决方案是否有效?

为什么不是';我的python项目Euler问题解决方案是否有效?,python,python-3.x,loops,primes,Python,Python 3.x,Loops,Primes,我一直在尝试解决project euler的问题,但似乎无法解决问题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=

我一直在尝试解决project euler的问题,但似乎无法解决问题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)
##问题7未解决
a=10
b=1
对于范围(1,a//2)内的c:
b<10002时:
如果%c==0:
a=a+1
其他:
b=b+1
a=a+1
印刷品(a)
印刷品(a、b)
##问题7 v2
n=10
p=4

而p您的原始测试没有正确执行。现在,当你的数字n没有除数时,你把变量p加起来。如果你有13作为你的n,你的p将增加5或6,而不是1

您需要重写原始性检查,这样,如果n是素数,它会向p添加1,如果n不是素数,则不会向p添加任何内容

您可以为此编写一个函数,使代码更可读、更易于使用

这样的原始检查函数可以如下所示:

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

        if n % i == 0:
            return 0
    return 1
此函数未针对速度进行优化,但在我针对Euler问题#7的解决方案中,它可以在0.132s内获得正确的输出

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

  • 使用素数定理估计第10个素数的大小

  • 设置一个足够大的埃拉托斯坦筛,以包括该数量

  • 通过筛子计数以找到10st素数


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

    如果有任何数字不除一个数,则将该数字作为素数计算。只有当你到达循环的末尾,却没有找到除数时,它才是素数。关于测试一个数字是否为素数,有数百个问题,我建议你点击标签找到它们。嗨,我真的很抱歉,但是在素数检查函数中,“Return 1”不应该在某种“else”下。而且,当我尝试使用看似随机的数字时,它会显示像10这样的数字作为素数?不知道为什么?我的错。。这适用于所有大于11的奇数,这就是为什么我在13开始计数,素数计数器p设置为6。因此,你需要跳过前6个素数才能使这项工作正常。但是这个测试比你的要快一点,因为它分两步迭代,在你的数字根处停止,这在处理大数字时会有很大的不同。啊,这很有意义。不管怎么说,我用了你的素性检查,在我提出了一些问题之后,我似乎得到了正确的答案:)非常感谢!非常感谢。我刚开始使用python,但我会确保查找它并了解它是如何工作的。
    >>> is_prime(10)
    0
    >>> is_prime(11)
    1