【问题标题】:Problem with finding 10,001th prime number: 1 off查找第 10,001 个素数的问题:1 分
【发布时间】:2022-01-25 15:57:14
【问题描述】:
"""7. By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.

What is the 10 001st prime number?"""
countprime=0
n=2
def prime(number):
    for factors in range(2, number):
        if number%factors==0:
            return False
            break
    return True

while countprime!=10001:
    if prime(n)==True:
        countprime+=1
    n+=1
print(n)

答案应该是 104743,但由于某种原因,我的蛮力程序得到了 104744,还有 1 个。有谁知道为什么是一次性的吗?

【问题讨论】:

  • 看来您在更新计数之前找到了素数。您可以通过将 while 语句替换为 countprime!=1 来看到这一点。

标签: python


【解决方案1】:

在循环退出之前,您最后一次增加了n。如果在检查它是否为素数之前增加 n,那么您的 countPrime 计数器和相应的素数将保持同步(但您必须从 1 而不是 2 开始):

n = 1
while countprime != 10001:
    n += 1
    if prime(n):
        countprime += 1

【讨论】:

    【解决方案2】:

    在您的程序找到第 10001 个素数后,n 的值增加 1,因此您的输出比预期答案多 1。

    如果您使用print(n-1),您的程序将按预期运行。

    【讨论】:

      【解决方案3】:

      countprime == 10001 保持变量n 不变时,您需要立即中断循环。一种可能的方式:

      while True:
          countprime += prime(n)
          if countprime == 10001:
              break
          n += 1
      

      【讨论】:

      • 好的,谢谢!这澄清了我的错误。
      【解决方案4】:
      while countprime != 10001:
          if prime(n)==True:
              countprime+=1
          n+=1
      

      当你找到一个质数时,你总是会移动到下一个数字。因此,在找到正确答案后,将 1 相加得到 104744。 尝试先加1,然后检查是否为素数。

      这是一个例子:

      n = 1
      while countprime != 10001:
          n += 1
          if prime(n):
              countprime += 1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-29
        • 1970-01-01
        • 2015-01-08
        • 2021-12-24
        • 2015-01-03
        • 1970-01-01
        • 2011-04-22
        • 2012-01-07
        相关资源
        最近更新 更多